2013-03-29 2 views
0

모든 행 주머니 내의 그룹 :돼지 : I는 구조 다음 한 돼지

(1 {(2), (2), (3), (12)})

및 I

(1 {(2,2), (3,1), (12,1)})

그것은 것만으로 그룹의와 가방 안에 계산 : (group_key으로 변환 할 , count)

foreach 내에서 중첩하여 일부 그룹을 시도했지만 작동하지 않습니다.

어떻게 돼지 라틴으로 할 수 있습니까? 아니면 직접 UDF를 작성해야합니까?

감사합니다.

답변

1

방금 ​​FLATTEN을 가방에 넣은 다음 다시 그룹화 할 수 있습니다. 작은 가방이있는 줄이 여러 개 많으면 낭비 일 수 있습니다. 이 경우 UDF를 권하고 싶습니다. 이것은 당신을 위해 (안된다) 작동해야한다 :

DUMP A; 
(1, {(2), (2), (3), (12)}) 
DESCRIBE A; 
(x:int, y:bag{}) 

B = FOREACH A GENERATE x, FLATTEN(y) AS z; 
C = GROUP B BY (x, z); 
D = FOREACH C GENERATE group.x, group.z, COUNT(B) AS ct; 
E = GROUP D BY x; 
F = FOREACH E GENERATE group, D.(z,ct); 

F는 당신이 찾고있는 것이어야한다.

+0

늦게 수락하여 죄송합니다. 나는 UDF를했다. – darkjh