W Spark-shell uruchamiam następujący kod:
scala> val input = sc.parallelize(List(1, 2, 4, 1881824400))
input: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[0] at parallelize at <console>:21
scala> val result = input.map(x => 2*x)
result: org.apache.spark.rdd.RDD[Int] = MapPartitionsRDD[1] at map at <console>:23
scala> println(result.collect().mkString(","))
2,4,8,-531318496
Dlaczego wynik 2 * 1881824400 = -531318496? nie 3763648800?
Czy to błąd w Sparku?
Dzięki za pomoc.
Odpowiedzi:
0 dla odpowiedzi № 1Dzięki ccheneson i hveiga. Odpowiedź jest taka, że mapowanie powoduje, że wynik jest większy niż 2 ^ 31, kończy się zakres Interger. Dlatego liczba przeskakuje do regionu negatywów.