Piszę program związany z wykresem w Scala
z Spark
. Zbiór danych ma 4 miliony węzłów i 4 miliony krawędzi (można traktować to jako drzewo), ale za każdym razem (Iteration
), edytuję tylko jego część, a mianowicie pod drzewko zakorzenione przez dany węzeł, oraz węzły w ścieżce między danym węzłem a rootem.Jaki jest skuteczny sposób aktualizowania wartości w RDD Sparka?
Numer Iteration
jest zależny, co oznacza, że wymagany jest wynik z i
. Muszę więc zapisać wynik każdego następnego kroku.
próbuję znaleźć skuteczny sposób, aby zaktualizować RDD
, ale nie mają pojęcia, że tak far.I znaleźć PairRDD
mają lookup
funkcji, które mogą skrócić czas obliczeń z O(N)
, O (M
), N
Oznaczmy całkowita liczba obiektów w numerach RDD
i M
oznacza liczbę elementów w każdej partycji.
Więc myślę, że jest tak, że mogę zaktualizować obiekt w RDD
z O(M)
? Lub więcej idealnie, O (1)? (Widzę wiadomość e-mail na liście poczty Sparka mówiąc, że lookup
mogą być modyfikowane w celu osiągnięcia O (1))
Inną rzeczą jest to, czy mogę osiągnąć O(M)
uaktualniania RDD
, czy mogę zwiększyć partycję do liczby większej niż liczba rdzeni, jaką mam i osiągnąć lepszą wydajność?
RDD jest niezmienna, możesz jedynie utworzyć nowy RDD przez transformację, ale nie można go zaktualizować. – cloud
@cloud Dzięki za komentarz, czy to znaczy, że muszę utworzyć zupełnie nowy RDD zamiast tylko partycji? – bxshi
To wszystko. Napiszę odpowiedź, aby wyjaśnić to szczegółowo. – cloud