Я пишу программу, связанную с графами, в Scala
с Spark
. Набор данных имеет 4 миллиона узлов и 4 миллиона ребер (вы можете рассматривать это как дерево), но каждый раз (Iteration
) я редактирую только его часть, а именно поддерево, укорененное в данном узле, и узлы на пути между данным узлом и корнем.
Iteration
имеет зависимость, что означает, что i+1
Iteration
нужен результат, исходящий от i
. Поэтому мне нужно сохранить результат каждого Iteration
для следующего шага.
Я пытаюсь найти эффективный способ обновления RDD
, но пока понятия не имею. Я обнаружил, что PairRDD
имеет функцию lookup
, которая может сократить время вычислений с O(N)
до O(M
), N
обозначает общее количество объектов в RDD
и M
обозначают количество элементов в каждом разделе.
Итак, я думаю, могу ли я в любом случае обновить объект в RDD
с помощью O(M)
? Или, в идеале, O(1)? (Я вижу электронное письмо в списке рассылки Spark, в котором говорится, что lookup
можно изменить для достижения O(1))
Другое дело, если бы я смог добиться O(M)
для обновления RDD
, мог бы я увеличить раздел до некоторого числа, большего, чем количество ядер, которое у меня есть, и добиться лучшей производительности?