reduce 函数给出否定答案

reduce function gives negative answer

朋友,

我现在正在尝试学习 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”。如果我尝试在 reduce 中使用“+”而不是“*”,我会得到正确的总和,否则不会。我还尝试将结果转换为 Int、String 和 Long

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