2013-07-31 3 views
0

감속기 크기가 매우 불균형 해 일부 감속기가 0 출력을 작성하고 나머지는 완료하는 데 몇 시간이 걸립니다. 기본 코드는 다음과 같습니다.Pig Cross 제품 감속기 키

이 경우 감속기 키는 무엇입니까?

답변

2

이것은 대답하기 어려운 질문입니다. Cross는 Pig에서 합성 키 조인으로 구현됩니다. 이 책에 설명 된 바와 같이 십자가를 이해하는 가장 좋은 자원이 예에서 Programming Pig - Page 68

이 십자가가 실제로

A = foreach tweets generate flatten(GFCross(0,2)), flatten(*); 
B = foreach clients generate flatten(GFCross(1,2)), flatten(*); 
C = cogroup A by ($0, $1), B by ($0, $1); 
crossproduct = foreach C generate flatten(A), flatten(B); 

처럼 보일 것입니다, GFCross는 내부 UDF이다. 첫 번째 인수는 입력 번호이고 두 번째 인수는 총 입력 수입니다. 귀하의 예제에서 UDF는 (int, int) 스키마를 갖는 레코드를 생성합니다. 첫 번째 인수와 동일한 필드는 0에서 3 사이의 임의의 숫자를가집니다. 다른 필드는 0에서 3까지 계산됩니다. 따라서 A의 첫 번째 레코드에 임의의 숫자 3이 있고 첫 번째 레코드가 B가 난수 2이면, 다음과 같은 4 개의 튜플이 각 입력에 대해 UDF에 의해 생성됩니다.

A {(3,0), (3,1), (3,2), (3,3)} 
B {(0,2), (1,2), (2,2), (3,2)} 

행한다 가입

가 상기 (3,2)는 각 입력 튜플의 모든 레코드를 들어 B.에서 (3,2) 투플에 결합하고, 오직 하나 있다는 것을 보장 레코드와 일치하고 생성 할 인공 키의 인스턴스.

정확하게, 축소 키가 무엇인지에 대한 질문에 대답하십시오 ... 축소 키는 GFCross에 의해 생성 된 합성 키입니다. 각 레코드마다 난수가 다르게 선택되므로 결과 조인은 축소 기의 균등 분배에서 수행해야합니다.