Пояснение метода складывания искры RDD

Я запускаю Spark-1.4.0, предварительно созданную для Hadoop-2.4 (в локальном режиме), чтобы вычислить сумму квадратов DoubleRDD. Мой код Scala выглядит так

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

И это дало удивительный результат97.0.

Это довольно нелогично по сравнению с версией Scalafold

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

который дает ожидаемый ответ13.0.

Кажется вполне вероятным, что я допустил некоторые хитрые ошибки в коде из-за недостатка понимания. Я читал о том, как функция используется вRDD.fold() должен быть коммуникативным, в противном случае результат может зависеть от разделов и т. д. Так, например, если я изменю количество разделов на 1,

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

код даст мне169.0 на моей машине!

Может кто-нибудь объяснить, что именно здесь происходит?

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

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