友
我正试图学习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
答案 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