Я действительно новичок в Apache Spark.
Я работаю над реализацией Приблизительного LOCI (или ALOCI), алгоритма обнаружения аномалий, распределенным способом через Spark. Этот алгоритм основан на хранении точек в QuadTree, которое используется для поиска числа соседей точки.
Я точно знаю, как работают QuadTrees. Фактически, я недавно реализовал такую структуру в Java. Но я полностью растерялся, поскольку речь идет о том, как такая структура может работать распределенным образом над Spark.
Нечто похожее на то, что мне нужно, можно найти в геопарке.
https://github.com/DataSystemsLab/GeoSpark/tree/b2b6f1d7f0015d5c9d663a7b28d5e1bb1043c413/core/src/main/java/org/datasyslab/geospark/spatialPartitioning/quadtree
GeoSpark во многих случаях использует класс PointRDD, который расширяет класс SpatialRDD, который, как я вижу, использует QuadTree, который можно найти в приведенной выше ссылке, для разделения пространственных объектов. Это то, что я понял, по крайней мере, в теории.
На практике я все еще не могу понять это. Скажем, например, что у меня есть миллионы записей в CSV, и я хочу прочитать и загрузить их в QuadTree.
Я мог бы прочитать csv в СДР, но что тогда? Как этот RDD логически соединяется с QuadTree, которое я пытаюсь собрать?
Конечно, я не ожидаю рабочего решения здесь. Мне просто нужна логика здесь, чтобы заполнить пробел в моей голове. Как реализовать распределенное QuadTree и как его использовать?