减少功能给出否定答案

时间:2015-10-17 23:04:46

标签: scala apache-spark reduce

我正试图学习Scala编码并探索目前的reduce()函数。我不明白为什么以下代码将列表中的所有数字相乘会给出负输出:

    val inputRDD=sc.parallelize(List(1,2,3,3,4,5,6,7,8,9,19,22,21,25,34,56,4,32,56,70))

    val result=inputRDD.reduce((x,y)=>x*y)

    println(result)`

我得到答案" -1619001344"当我运行上面的代码。如果我尝试使用" +"在减少而不是" *"我得到了适当的金额,但没有其他。我也尝试将结果转换为Int,String和Long

1 个答案:

答案 0 :(得分:2)

Int和Long类型都是溢出的,因此您需要使用BigInt进行此操作。

val inputRDD = sc.parallelize(List(1,2,3,3,4,5,6,7,8,9,19,22,21,25,34,56,4,32,56,70))

val inputRDDasBigInt = inputRDD.map(x => scala.BigInt(x))
val result = inputRDDasBigInt.reduce((x,y)=>x*y)

println(result)
228235320014929920000