2017-11-18 12 views
-3

에는 다음이 포함- 분할지도하는 getKey을 내가 텍스트 파일 느릅 나무가 등등

A>B,C,D 
B>A,C,D,E 
C>A,B,D,E 
D>A,B,C,E 
E>B,C,D 
나는 다음과 같은 얻기 위해 스파크 - 스칼라 스크립트를 작성하려합니다

: 각 왼쪽의 경우 (회원은, 우리는 모든 권리 구성원을 제공합니다.)

(A,B) 
(A,C) 
(A,D) 
(B,A) 
(B,C) 
(B,D) 
(B,E) 
... 

나는지도를 통해 이동 내 결과를 새로운 맵을 공급하기 위해 키를 얻기 위해 시도했지만 작동하지 않았다. 나는 내 요구에 어떤 답을 찾을 수 없기 때문에이 - 스칼라 불꽃이 같은 기본적인 코드를 작성할 수 있습니다 궁금

import scala.io.Source 

// Loading file 
val file = sc.textFile("friends.txt") 

// MAP 
// A;B 
// A;C 
// ... 

var associations_persons_friends:Map[Char,Char] = Map() 

var lines = file.map(line=>line.split(">")) 

for (line <- lines) 
{ 
    val person = line.key 

    for (friend <- line.value.split(",")) 
    { 
     associations_persons_friends += (person -> friend) 
    } 
} 

associations_persons_friends.collect() 

val rdd = sc.parallelize(associations_persons_friends) 
rdd.foreach(println) 


// GROUP 
// For each possible pair, all associated values 
// AB;B-C-D-A-C-D-E 


// REDUCE 
// For each pair we keep occurences >= 2 
// AB;C-D 

: 여기

(자세한 의사 코드 같은) 내 코드입니다 인터넷. 도움 주셔서 감사합니다.

답변

1

당신은 당신은 내가 대답은 작동

+0

감사합니다 도움이 될 것입니다 희망

(A,B) (A,C) (A,D) (B,A) (B,C) (B,D) (B,E) (C,A) (C,B) (C,D) (C,E) (D,A) (D,B) (D,C) (D,E) (E,B) (E,C) (E,D) 

로 출력을해야

val rdd = sc.textFile("path to the text file") rdd.map(line => line.split(">")).flatMap(array => array(1).split(",").map(arr => (array(0), arr))).foreach(println) 

mapflatMap의 조합으로 귀하의 요구 사항을 달성 할 수있다. 내 의사 코드를 이런 식으로 변환하는 방법을 찾는 데 어려움이 있습니다. 내가 말할 수있는 조언이나 온라인 리소스가 있습니까? – CodeWalker

+0

예를 들어 다음 단계를 수행하려면 다음을 수행해야합니다. 각 왼쪽 멤버에 대해 : 왼쪽 멤버를위한 커플을 만듭니다. - 생성 된 각 커플에 대해 : 모든 해당 오른쪽 멤버를 가져옵니다. 나는 내 자신이이 일을하기 위해 사용할 수있는 문서의 종류를 모른다. – CodeWalker

+0

그것 대답은 다음 upvote 도움 받아 그것을 받아 :) –