-
Notifications
You must be signed in to change notification settings - Fork 19
[pig] MERGE JOIN
dsindex edited this page Sep 17, 2014
·
8 revisions
file A, line count = 10,000,000,000 (100억)
query \t frequency
file B, line count = 100,000,000 (10억)
query
Q : file B에 있는 query가 file A에 존재하는 경우, 해당하는 frequency를 가져오고 싶다.
A : 이런 경우 아래와 같이 merge join을 사용해서 처리 가능.
A = LOAD '$input_left' USING PigStorage('\t');
B = LOAD '$input_right' USING PigStorage('\t');
C = JOIN A by $0, B by $0 using 'merge';
-- C = A + B if A.$0 == B.$0
-- row count of C <= row count of B
STORE C INTO '$output' USING PigStorage('\t');
단, 개별 입력의 key값은 'ASC'로 정렬돼 있어야만 한다.
A = LOAD '$input' USING PigStorage('\t');
B = ORDER A BY $0 ASC;
STORE B INTO '$output' USING PigStorage('\t');
-
주의
- query가 'a a \t 100', 'aa \t 1000'과 같이 공백을 제거하면 같은 값인 경우, 미리 query를 key값으로 통합
'C = JOIN A by REPLACE(LOWER($0),' ',''), B by REPLACE(LOWER($0),' ','') using 'merge';' 이런식으로 사용하면 같은 키값이 여러번 존재한다는 오류가 발생한다.
-
새로운 입력 파일 포맷
file A, line count = 10,000,000,000 (100억)
query_key \t query \t sum_frequency
file B, line count = 100,000,000 (10억)
query_key \t query