2017-05-23 370 views
5

最近我有方案將數據存儲在keyValue Pair中,並遇到了一個函數reduceByKey(_ ++ _)。這是更簡短的語法。我無法理解這實際上意味着什麼。reduceByKey(_ ++ _)是什麼意思

例:reduceBykey(_ + _)意味着reduceByKey((a,b)=>(a+b))

所以reduceByKey(_ ++ _)手段?

我能夠使用reduceByKey(_ ++ _)來創建數據中的Key值對。

val y = sc.textFile("file:///root/My_Spark_learning/reduced.txt") 

y.map(value=>value.split(",")) 
    .map(value=>(value(0),value(1),value(2))) 
    .collect 
    .foreach(println) 

(1,2,3) 
(1,3,4) 
(4,5,6) 
(7,8,9) 

y.map(value=>value.split(",")) 
    .map(value=>(value(0),Seq(value(1),value(2)))) 
    .reduceByKey(_ ++ _) 
    .collect 
    .foreach(println) 

(1,List(2, 3, 3, 4)) 
(4,List(5, 6)) 
(7,List(8, 9)) 

回答

4

reduceByKey(_ ++ _)轉化爲reduceByKey((a,b) => a ++ b)

++是在List上定義的method,它將另一個列表連接到它。

所以,在採樣數據鑰匙1,aList(2,3)bList(3,4)以及因此List(2,3)List(3,4)和(List(2,3) ++ List(3,4))的級聯將產生List(2,3,3,4)

+0

感謝您的解釋。 –

1

reduceByKey(_ ++ _)相當於reduceByKey((x,y)=> x ++ y) reduceByKey有兩個參數,應用功能和返回

在其包裝箱一組和++只是增加了集合在一起,結合這兩套要素之首。

對於每個鍵它不斷追加在列表中。在你的1例爲重點x是List(2,3)和y將List (3,4)++將增加既是List (2,3,3,4)

如果你有一個像(1,4,5)另一個值那麼x會在這種情況下List(4,5)和y應該是List (2,3,3,4)和結果將List(2,3,3,4,4,5)