2017-02-22 12 views
1

私はリストを持っています(Scalaで)。リスト内のグループの要素のペア

val seqRDD = sc.parallelize(Seq(("a","b"),("b","c"),("c","a"),("d","b"),("e","c"),("f","b"),("g","a"),("h","g"),("i","e"),("j","m"),("k","b"),("l","m"),("m","j"))) 

特定統計情報の2番目の要素でグループ化し、結果を1つのリストにまとめます。 1に任意のペア内の他の要素に接続されている

checkItOut: List[(String, String)] = List((c,a), (g,a), (a,b), (d,b), (f,b), (k,b), (m,j), (b,c), (e,c), (i,e), (j,m), (l,m), (h,g)) 

さて、私がやろうとしていることは、「グループ」のすべての要素(ないペア)です。出力は次のようになります

val checkItOut = seqRDD.groupBy(each => (each._2)) 
        .map(each => each._2.toList) 
        .collect 
        .flatten 
        .toList 

リスト。 例: cは1つのペアにaがあり、aにはgがあり、したがって(a、c、g)が接続されています。次に、cはbとeも持ち、bはa、d、f、kであり、これらは他のいくつかの対の中で他の文字と同じです。私はそれらをリストに入れたい。

これはBFSトラバーサルで行うことができます。これを行うSparkにAPIがあるのだろうか?

+0

あなたはGraphX、connectedComponentsを探しています: – Traian

+0

あなたは 'groupWith'でこれを行うことができます - 私は別の質問のために書いた何か。このグループの既存のメンバーと述語が一致する場合は、グループに要素を追加します。http://stackoverflow.com/a/35919875/21755 –

答えて

関連する問題