如果 reduceByKey(_+_) 的结果超过 int 范围怎么办



我正在尝试在Spark中做一个简单的MR工作,这是代码:

val testRDD = someRDD.map((_, 1)).reduceByKey(_+_)

在映射阶段,该值为 Int,如果在归约阶段,该值太大而超出 Int 范围怎么办?我大概可以这样做

val testRDD = someRDD.map((_, 1.toLong)).reduceByKey(_+_)

但是有更好的主意吗?

没有特定于 Spark 的内容。它只会导致整数溢出:

sc.parallelize(Seq(("a", Integer.MAX_VALUE), ("a", 1))).reduceByKey(_ + _).first
// (String, Int) = (a,-2147483648)

如果您怀疑可能发生溢出错误,则绝对应该使用更合适的数据类型,Long是整数值的不错选择:

sc.parallelize(Seq(
  ("a", Integer.MAX_VALUE.toLong), ("a", 1L)
)).reduceByKey(_ + _).first
// (String, Long) = (a,2147483648)

相关内容

  • 没有找到相关文章

最新更新