Spark: разница семантики между Reduce и ReduceByKey

В документации Spark говорится, что метод RDDsreduce требует ассоциативной и коммутативной двоичной функции.

Однако методreduceByKey ТОЛЬКО требуется ассоциативная бинарная функция.

sc.textFile("file4kB", 4)

Я сделал несколько тестов, и, очевидно, это поведение, которое я получаю. Почему эта разница? ПочемуreduceByKey убедитесь, что бинарная функция всегда применяется в определенном порядке (для учета отсутствия коммутативности), когдаreduce не?

Пример, если загружается некоторый (маленький) текст с 4 разделами (минимум):

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

затем:

r.reduce(_ + _)

возвращает строку, где части не всегда находятся в одном и том же порядке, тогда как:

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

всегда возвращает одну и ту же строку (где все в том же порядке, что и в исходном файле).

(Я проверил сr.glom и содержимое файла действительно распределено по 4 разделам, пустых разделов нет).

Ответы на вопрос(2)

Ваш ответ на вопрос