2017-05-23 15 views
5

です。最近、keyValueペアにデータを格納するシナリオがあり、関数reduceByKey(_ ++ _)を見つけました。これは省略形の構文です。私はこれが実際に何を意味するのか理解できません。reduceByKey(_ ++ _)の意味は

例:reduceBykey(_ + _)だからreduceByKey((a,b)=>(a+b))

reduceByKey(_ ++ _)手段意味します?

reduceByKey(_ ++ _)を使用して、データからキー値のペアを作成することができます。

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)bなりList(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に相当する2つのパラメータをとり、関数を適用し、それが両方のセットの要素を組み合わせ、セット及び++がちょうど一緒にコレクションを追加クレートまず

を返します。

各キーについては、リストに追加されたままになります。 1のあなたのケースでは鍵xはList(2,3)とyになるようList (3,4)++はあなたが(1,4,5)のような別の値を持っていた場合、xがこのケースでList(4,5)だろうとyはList (2,3,3,4)こととなるはずであるList (2,3,3,4)

の両方が追加されますされますList(2,3,3,4,4,5)