У меня есть список (в 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))
Теперь, что я пытаюсь сделать, это «группа» все элементы (не пар), которые подключены к другим элементам в любой паре один список. Например: c находится в одной паре, a - с g в следующем, поэтому (a, c, g) связаны. Тогда c также с b и e, что b находится с a, d, f, k, и они связаны с другими символами в некоторой другой паре. Я хочу, чтобы они были в списке.
Я знаю, что это можно сделать с обходом BFS. BUt задается вопросом, есть ли API в Spark, который это делает?
Вы ищете Graphx, connectedComponents: – Traian
Вы можете сделать это с 'groupWith' - то, что я написал для другого вопроса. Он добавляет элементы в группу, если предикат соответствует любому существующему члену этой группы, что вам нужно здесь: http://stackoverflow.com/a/35919875/21755 –