2016-07-07 51 views
0

我試圖做星火一個簡單的MR工作,這裏是代碼:如果什麼reduceByKey( - + - )的結果超出INT範圍

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

在地圖階段,價值爲int ,如果在減少階段,該值太大而超出Int範圍?我可以這樣做

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

但是有沒有更好的想法?

回答

2

Nothing Spark specific。這隻會導致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)