Неожиданные результаты в Spark MapReduce

Я новичок в Spark и хочу понять, как MapReduce работает под капотом, чтобы убедиться, что я правильно его использую.Эта почта предоставил отличный ответ, но мои результаты не соответствуют описанной логике. Я управляюSpark Quick Start Руководство в Скала в командной строке. Когда я правильно добавляю длину строки, все получается просто отлично. Общая длина линии 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

Когда я немного настраиваю его, чтобы использовать (a-b) вместо (a + b),

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

Я ожидал -1185, согласно логике вэта почта:

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.

Однако происходит нечто странное:

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

Когда я запускаю это снова ...

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

Может кто-нибудь сказать мне, почему результат 151 (или -151) вместо -1185?

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

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