2015-06-12 33 views
1

我有一個格式爲(String,(Int,Int))的Spark RDD,我想將Int值一起添加以創建一個(String,詮釋)地圖。Scala Spark - 通過爲每個鍵添加多個值來減少RDD

這是在我的RDD的元素的一個示例: res13:(字符串,(INT,INT))=(9D4669B432A0FD,(1,1))

我想與的RDD結束(字符串,強度)=(9D4669B432A0FD,2)

回答

3

你應該只是map的值到所述第二對的總和:

yourRdd.map(pair => (pair._1, pair._2._1 + pair._2._2)) 

@marios建議在編輯下面更好的語法:

或者,如果你想成爲一個更可讀:

yourRdd.map{case(str, (x1,x2)) => (str, x1+x2)} 
1

的Gabor Bakos的答案是正確的,如果有獨特的密鑰。但是,如果你有多個相同的密鑰,並且如果你想將它縮減爲唯一密鑰,那麼使用reduceByKey。

實施例:

val data = Array(("9888wq",(1,2)),("abcd",(1,1)),("abcd",(3,2)),("9888wq",(4,2))) 
val rdd= sc.parallelize(data) 
val result = rdd.map(x => (x._1,(x._2._1+x._2._2))).reduceByKey((x,y) => x+y) 
result.foreach(println) 

輸出:

(9888wq,9) 
(abcd,7) 
相關問題