Erklärung der Faltmethode des Funken RDD

Ich verwende Spark-1.4.0, das für Hadoop-2.4 (im lokalen Modus) vorgefertigt ist, um die Summe der Quadrate einer DoubleRDD zu berechnen. Mein Scala-Code sieht aus wie

sc.parallelize(Array(2., 3.)).fold(0.0)((p, v) => p+v*v)

nd es gab ein überraschendes Ergebn97.0.

Dies ist im Vergleich zur Scala-Version von @ nicht sehr intuitifold

Array(2., 3.).fold(0.0)((p, v) => p+v*v)

was gibt die erwartete Antwort13.0.

Es ist sehr wahrscheinlich, dass ich aufgrund mangelnden Verständnisses einige knifflige Fehler im Code gemacht habe. Ich habe gelesen, wie die Funktion in @ verwendRDD.fold() sollte kommunikativ sein, ansonsten kann das Ergebnis von Partitionen usw. abhängen. Wenn ich also die Anzahl der Partitionen auf 1 ändere,

sc.parallelize(Array(2., 3.), 1).fold(0.0)((p, v) => p+v*v)

Der Code wird mir geben169.0 auf meiner Maschine!

Kann jemand erklären, was genau hier passiert?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage