Spark: Unterschied der Semantik zwischen reduct und reductByKey

n der Dokumentation von Spark heißt es, dass die RDD-Methodereduce erfordert eine assoziative UND kommutative Binärfunktion.

Allerdings ist die MethodereduceByKey Benötigt NUR eine assoziative Binärfunktion.

sc.textFile("file4kB", 4)

Ich habe einige Tests gemacht und anscheinend ist es das Verhalten, das ich bekomme. Warum dieser Unterschied? Warum tutreduceByKey sicherstellen, dass die Binärfunktion immer in einer bestimmten Reihenfolge angewendet wird (um die fehlende Kommutativität auszugleichen), wennreduce nicht

Beispiel, wenn Sie einen (kleinen) Text mit mindestens 4 Partitionen laden:

val r = sc.textFile("file4k", 4)

dann

r.reduce(_ + _)

returns eine Zeichenfolge, in der Teile nicht immer in derselben Reihenfolge sind, wohingegen:

r.map(x => (1,x)).reduceByKey(_ + _).first

gibt immer den gleichen String zurück (wobei sich alles in der gleichen Reihenfolge befindet wie in der Originaldatei).

(Ich habe mit @ gecheckr.glom und der Dateiinhalt ist in der Tat auf 4 Partitionen verteilt (es gibt keine leere Partition).

Antworten auf die Frage(4)

Ihre Antwort auf die Frage