2016-07-07 4 views
0

내가 스파크에서 간단한 MR 작업을하려고하고있다가, 여기에 코드입니다 reduceByKey (_ + _)의 결과가 초과 어떤 경우 :지도 단계에서가 INT 범위

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

, 값은 지능이다 , 감축 단계에서 값이 너무 커서 Int 범위를 초과하면 어떻게됩니까? 나는 이런 식으로 할 수있다.

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

그러나 더 좋은 생각이 있니?

답변

2

Nothing Spark specific. 그것은 단순히 integer overflow가 발생합니다 :

sc.parallelize(Seq(
    ("a", Integer.MAX_VALUE.toLong), ("a", 1L) 
)).reduceByKey(_ + _).first 

// (String, Long) = (a,2147483648) 
:

sc.parallelize(Seq(("a", Integer.MAX_VALUE), ("a", 1))).reduceByKey(_ + _).first 

// (String, Int) = (a,-2147483648) 

당신이 의심되는 경우 오버 플로우 오류가 당신은 확실히 더 적절한 데이터 유형 및 Long를 사용해야합니다 발생할 수는 정수 값을위한 좋은 선택이다