【问题标题】:What if the result of reduceByKey(_+_) exceed int range如果 reduceByKey(_+_) 的结果超出 int 范围怎么办
【发布时间】:2016-11-10 07:41:54
【问题描述】:

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

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

在map阶段,值是Int,如果在reduce阶段,值太大超出Int范围怎么办?我大概可以这样做

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

但是有更好的主意吗?

【问题讨论】:

    标签: scala apache-spark mapreduce reduce integer-overflow


    【解决方案1】:

    没有特定于 Spark 的。它只会导致integer overflow

    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)
    

    【讨论】:

      猜你喜欢
      • 2022-01-14
      • 2013-10-21
      • 1970-01-01
      • 2010-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多