我有一個格式爲(String,(Int,Int))的Spark RDD,我想將Int值一起添加以創建一個(String,詮釋)地圖。Scala Spark - 通過爲每個鍵添加多個值來減少RDD
這是在我的RDD的元素的一個示例: res13:(字符串,(INT,INT))=(9D4669B432A0FD,(1,1))
我想與的RDD結束(字符串,強度)=(9D4669B432A0FD,2)
我有一個格式爲(String,(Int,Int))的Spark RDD,我想將Int值一起添加以創建一個(String,詮釋)地圖。Scala Spark - 通過爲每個鍵添加多個值來減少RDD
這是在我的RDD的元素的一個示例: res13:(字符串,(INT,INT))=(9D4669B432A0FD,(1,1))
我想與的RDD結束(字符串,強度)=(9D4669B432A0FD,2)
你應該只是map
的值到所述第二對的總和:
yourRdd.map(pair => (pair._1, pair._2._1 + pair._2._2))
@marios建議在編輯下面更好的語法:
或者,如果你想成爲一個更可讀:
yourRdd.map{case(str, (x1,x2)) => (str, x1+x2)}
的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)