将列表中的一对元素分组

Group pair of elements in a List

我有一个列表(在 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"))) 

我按特定统计数据的第二个元素分组,并将结果展平到一个列表中。

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

输出如下所示:

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))

现在,我想要做的是 "group" 所有与任何对中的其他元素连接到一个列表的元素(不是对)。 例如: c 与 a 成一对,a 与 g 成一对,所以 (a,c,g) 是连通的。然后,c 也与 b 和 e 一起,b 与 a、d、f、k 一起,这些与其他对中的其他字符一起。我想把它们放在一个列表中。

我知道这可以通过 BFS 遍历来完成。但是想知道 Spark 中是否有一个 API 可以做到这一点?

GraphX,连通分量:http://spark.apache.org/docs/latest/graphx-programming-guide.html#connected-components