2017-03-05 1 views
1

// 내가 //어떻게 2.01

스파크 2.01를 사용하고 불꽃에 직교 제품의이 유형을 수행 할 그리고 내 데이터는

(K1,Array(V1,V2,V3.....V30)) 
(K2,Array(V1,V2,V3.....V30)) 
(K3,Array(V1,V2,V3.....V30)) 
... 
(K3704, Array(V1,V2,V3.....V30)) 

처럼 보이는 난을 만들려면 각 키의 값에 대한 데카르트 곱리스트 값.

(K1, (V1,V2),(V1,V3),(V1,V4) ... 
(K2, (V2,V3),(V2,V4),(V2,V5) ... 
... 
//PS. there are no duplicate elements like (V1,V2) == (V2,V1) 

30 명이 될 것입니다. 각 키에 대한 작업이지만 최적화 할 수 있다면 더 좋습니다.

답변

1

파이썬에서 우리는 mapValues() 내부 패키지 itertools에서 combinations() 기능을 사용할 수 있습니다 : 스칼라, 우리는 유사한 방법으로 combinations() 방법을 사용할 수 있습니다

from itertools import combinations 
rdd.mapValues(lambda x: list(combinations(x, 2))) 

. 그것은 단지 섭취 및 출력 Seq을 입력 객체 때문에, 우리는 당신의 기대 형식에 도착 체인에 함께 몇 가지 더 방법이있을 것이다 :

rdd.mapValues(_.toSeq.combinations(2).toArray.map{case Seq(x,y) => (x,y)}) 
+0

감사합니다! 그것은 많은 도움이되었습니다!^- ^ –