-
Notifications
You must be signed in to change notification settings - Fork 19
[pig] MERGE JOIN
dsindex edited this page Aug 27, 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 REPLACE(LOWER($0),' ',''), B by REPLACE(LOWER($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'과 같이 공백을 제거하면 같은 값이지만 서로 다르게 존재할 경우는 'ASC'정렬 순서에서 첫번째 매칭되는 것이 출력될 것이다.
- 이런 문제를 방지하기 위해서 미리 query를 key값으로 통일시켜두는 것이 좋다.
-
새로운 입력 파일 포맷 file A, line count = 10,000,000,000 (100억)
query_key \t query \t frequency
file B, line count = 100,000,000 (10억)
query_key \t query