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?