Wie kann der Wert in Spark's RDD effizient aktualisiert werden?
Ich schreibe ein grafisches Programm inScala
mitSpark
. Das Dataset hat 4 Millionen Knoten und 4 Millionen Kanten (Sie können dies als Baum behandeln), aber für jedes Mal (anIteration
) Bearbeite ich nur einen Teil davon, nämlich einen Teilbaum, der durch einen bestimmten Knoten verwurzelt ist, und die Knoten in einem Pfad zwischen diesem bestimmten Knoten und dem Stamm.
DasIteration
hat Abhängigkeit, was bedeuteti+1
Iteration
braucht das Ergebnis voni
. Also muss ich das Ergebnis von jedem speichernIteration
für den nächsten Schritt.
Ich versuche, eine effiziente Möglichkeit zum Aktualisieren zu findenRDD
, aber ich habe noch keine AhnungPairRDD
haben einelookup
Funktion, die die Rechenzeit von reduzieren könnteO(N)
, zu(M
),N
bezeichnen die Gesamtzahl der Objekte inRDD
undM
bezeichnen die Anzahl der Elemente in jeder Partition.
Ich denke also, es gibt sowieso, dass ich ein Objekt im aktualisieren könnteRDD
mitO(M)
? Oder im Idealfall, O (1)? (Ich sehe eine E-Mail in Spark's Mailingliste, die besagt, dass dielookup
kann modifiziert werden, um O (1) zu erreichen)
Eine andere Sache ist, wenn ich erreichen könnteO(M)
zur Aktualisierung derRDD
Kann ich die Partition auf eine größere Anzahl als die Anzahl der Kerne erhöhen und eine bessere Leistung erzielen?