언어에 익숙하지 않고 위 코드에서 어떤 일이 벌어지고 있는지 이해하려고하는 모든 사람들에게 내 의견이있는 버전 덤프 출력)
데이터 Samle ('sample_data/test_limiting.pig')
1|5
1|5
1|6
2|9
2|9
3|1
3|2
그리고 돼지 스크립트 자체 :
A = LOAD 'sample_data/test_limiting.pig' USING PigStorage('|') AS (c1:int, c2:int);
----
-- A: {c1: int,c2: int}
----
-- (1,5)
-- (1,5)
-- (1,6)
-- (2,9)
-- (2,9)
-- (3,1)
-- (3,2)
B = GROUP A BY (c1, c2);
----
-- B: {group: (c1: int,c2: int),A: {(c1: int,c2: int)}}
----
-- ((1,5),{(1,5),(1,5)})
-- ((1,6),{(1,6)})
-- ((2,9),{(2,9),(2,9)})
-- ((3,1),{(3,1)})
-- ((3,2),{(3,2)})
C = FOREACH B GENERATE group, COUNT(A) as num;
----
-- C: {group: (c1: int,c2: int),num: long}
----
-- ((1,5),2)
-- ((1,6),1)
-- ((2,9),2)
-- ((3,1),1)
-- ((3,2),1)
D = GROUP C BY group.c1;
----
-- D: {group: int,C: {(group: (c1: int,c2: int),num: long)}}
----
-- (1,{((1,5),2),((1,6),1)})
-- (2,{((2,9),2)})
-- (3,{((3,1),1),((3,2),1)})
E = FOREACH D {
SA = ORDER C BY num DESC;
SB = LIMIT SA 1;
GENERATE FLATTEN(SB.group);
}
----
-- E: {null::group: (c1: int,c2: int)}
----
-- ((1,5))
-- ((2,9))
-- ((3,1))
B tw, 대문자 변형에 대한 폭격으로 참조 '그룹'을 소문자로 작성해야했습니다. 어쩌면 다른 버전으로 인해, 몰라.
돼지 스키마 참조 오류로 인해 약간의 변경 사항이 있습니다. "D = GROUP C BY c1"읽어야합니다. "D = GROUP C BY group.c1"및 "GENERATE SB.c1, SB.c2"읽어야합니다 : "일반 플랫 (SB.group)"도움 주셔서 감사합니다. . 위대한 작품! – GregH
당신은 환영합니다, 나는 문법을 고쳤다. – frail