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?