Resultados inesperados en Spark MapReduce

Soy nuevo en Spark y quiero entender cómo se hace MapReduce debajo del capó para asegurarme de que lo uso correctamente.Esta publicación proporcionó una gran respuesta, pero mis resultados no parecen seguir la lógica descrita. Estoy corriendo elSpark Quick Start guía en Scala en línea de comando. Cuando hago la suma de la longitud de línea correctamente, las cosas salen bien. La longitud total de la línea es 1213:

scala> val textFile = sc.textFile("README.md")

scala> val linesWithSpark = textFile.filter(line => line.contains("Spark"))

scala> val linesWithSparkLengths = linesWithSpark.map(s => s.length)

scala> linesWithSparkLengths.foreach(println)

Result:
14
78
73
42
68
17
62
45
76
64
54
74
84
29
136
77
77
73
70

scala> val totalLWSparkLength = linesWithSparkLengths.reduce((a,b) => a+b)
    totalLWSparkLength: Int = 1213

Cuando lo modifico ligeramente para usar (a-b) en lugar de (a + b),

scala> val totalLWSparkTest = linesWithSparkLengths.reduce((a,b) => a-b)

Esperaba -1185, de acuerdo con la lógica enesta publicación:

List(14,78,73,42,68,17,62,45,76,64,54,74,84,29,136,77,77,73,70).reduce( (x,y) => x - y )
  Step 1 : op( 14, 78 ) will be the first evaluation. 
     x is 14 and y is 78. Result of x - y = -64.
  Step 2:  op( op( 14, 78 ), 73 )
     x is op(14,78) = -64 and y = 73. Result of x - y = -137
  Step 3:  op( op( op( 14, 78 ), 73 ), 42) 
     x is op( op( 14, 78 ), 73 ) = -137 and y is 42. Result is -179.
  ...
  Step 18:  op( (... ), 73), 70) will be the final evaluation.
     x is -1115 and y is 70. Result of x - y is -1185.

Sin embargo, sucede algo extraño:

scala> val totalLWSparkTest = linesWithSparkLengths.reduce((a,b) => a-b)
totalLWSparkTest: Int = 151

Cuando lo corro de nuevo ...

scala> val totalLWSparkTest = linesWithSparkLengths.reduce((a,b) => a-b)
totalLWSparkTest: Int = -151

¿Alguien puede decirme por qué el resultado es 151 (o -151) en lugar de -1185?

Respuestas a la pregunta(1)

Su respuesta a la pregunta