Explicação do método de dobra do spark RDD

Estou executando o Spark-1.4.0 pré-criado para o Hadoop-2.4 (no modo local) para calcular a soma dos quadrados de um DoubleRDD. Meu código Scala parece

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

E deu um resultado surpreendente97.0.

Isso é bastante contra-intuitivo em comparação com a versão Scala dofold

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

o que dá a resposta esperada13.0.

Parece bastante provável que cometi alguns erros complicados no código devido a uma falta de entendimento. Eu li sobre como a função usada noRDD.fold() deve ser comunicativo, caso contrário, o resultado pode depender de partições e etc. Por exemplo, se eu alterar o número de partições para 1,

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

o código vai me dar169.0 na minha máquina!

Alguém pode explicar o que exatamente está acontecendo aqui?

questionAnswers(1)

yourAnswerToTheQuestion