Explicación del método de plegado de la chispa RDD

Estoy ejecutando Spark-1.4.0 preconstruido para Hadoop-2.4 (en modo local) para calcular la suma de cuadrados de un DoubleRDD. Mi código Scala parece

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

Y dio un resultado sorprendente97.0.

Esto es bastante contra-intuitivo en comparación con la versión Scala defold

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

que da la respuesta esperada13.0.

Parece bastante probable que haya cometido algunos errores difíciles en el código debido a la falta de comprensión. He leído sobre cómo se usa la función enRDD.fold() debe ser comunicativo; de lo contrario, el resultado puede depender de particiones, etc. Por ejemplo, si cambio el número de particiones a 1,

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

el código me dará169.0 en mi maquina!

¿Alguien puede explicar qué está sucediendo exactamente aquí?

Respuestas a la pregunta(1)

Su respuesta a la pregunta