2015-07-31 3 views
0

В Спарк-оболочки, я запускаю следующий код:большое целое число в Спарк

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 

Почему результат 2 * 1881824400 = -531318496? не 3763648800?

Это ошибка в искры?

Благодарим за помощь.

+0

Я считаю, что это переполнение http://stackoverflow.com/questions/3001836/how-does-java-handle-integer-underflows-and-overflows-and-how-would-you-check-fo – ccheneson

+1

2 * 1881824400 больше максимального числа, которое равно 2^31 - 1. Вы должны использовать BigInteger вместо Int, чтобы иметь возможность получить ожидаемое значение. – hveiga

+0

Я понял. Благодаря! –

ответ

0

Спасибо, ccheneson и hveiga. Ответ заключается в том, что отображение делает результат больше 2^31, исчерпывает диапазон Interger. Поэтому число переходит в область негативов.

Смежные вопросы