2017-02-22 26 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"))) 

Я группирую второй элемент для конкретной статистики и сглаживаю результат в один список.

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, который это делает?

+0

Вы ищете Graphx, connectedComponents: – Traian

+0

Вы можете сделать это с 'groupWith' - то, что я написал для другого вопроса. Он добавляет элементы в группу, если предикат соответствует любому существующему члену этой группы, что вам нужно здесь: http://stackoverflow.com/a/35919875/21755 –

ответ

 Смежные вопросы

  • Нет связанных вопросов^_^