2017-12-26 29 views
0

2 개의 RDD가 있습니다.키를 일치시키고 데이터 프레임을 사용하지 않고 pyspark에있는 2 개의 RDD를 연결하십시오.

RDD 1: 
[['1', 'user1', 'Name1'], 
['2', 'user4', 'Name2']] 

RDD 2: 
[['5', '1a', '3', '99', 'g1'], 
['11', '2b', '1', '99', 'g2'], 
['12', '3c', '2', '99', 'g3']] 

나는 등 RDD2의 세번째 필드 (3,1,2)과 등 RDD 1 (1,2)의 첫 번째 필드를 사용하여 상기 2 RDD의 가입하고 새로운 출력에 기록 행 일치 가야 RDD를 사용할 수있는 경우에만 허용됩니다. 수행 할 수있는 조인 작업이 있다는 것을 알고 있습니다. 그러나 확실하지 않은 방법.

Required output 
[['1','Name1'], 
['2','Name2']] 

어떻게 진행하나요? 데이터 프레임을 사용하지 않고이를 수행 할 수있는 방법이 있습니까?

비슷한 질문의 답이 제가 이상적인 해결책을 찾는 데 도움이되지 않았습니다. 그래서 나는 다시 쿼리를 게시해야했다.

+1

특정 키에 의한 pyspark rdds의 가능한 복제본 (https://stackoverflow.com/questions/42821955/pyspark-join-rdds-by-a-specific-key) – philantrovert

답변

3

RDD에 가입 할 수도 있습니다. 이 코드는 원하는 것을 정확하게 제공합니다.

tuple_rdd1 = rdd1.map(lambda x: (x(0), x(2))) 
tuple_rdd2 = rdd1.map(lambda x: (x(2), 0))) 
result = tuple_rdd1.join(tuple_rdd2).map(lambda x: [x[0], x[1][0] ]) 

첫 번째 행은 rdd1에서 키와 이름을 선택합니다. 2 행은 rdd2의 3 열을 선택하고 마지막 행은 2 행을 결합하여 결과를 원하는 형식으로 놓습니다.

+0

정말 고마워요. 이로 인해 문제가 해결되었습니다. 키는 tuple_rdd2 ​​= rdd1.map에서 0입니다 (lambda x : (x (2), 0))). 나는 범위 문제를 벗어난 색인을 얻고 있었고이 해결책이 그것을 해결했다. –