2017-02-22 3 views
1

목록이 있습니다 (스칼라에서).목록의 그룹 쌍 요소 집합

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 순회와 함께 할 수 있다는 것을 알고있다. 이 작업을 수행하는 Spark에 API가 있다면 궁금하지 않으세요?

+0

는 : – Traian

+0

당신은 groupWith''이 작업을 수행 할 수 있습니다 - 제가 다른 질문에 대한 쓴 것을. 다음과 같이 그룹의 기존 멤버와 조건이 일치하면 그룹에 요소를 추가합니다. http://stackoverflow.com/a/35919875/21755 –

답변