Skip to content

[pig] MERGE JOIN

dsindex edited this page Sep 17, 2014 · 8 revisions

pig merge join

pig functions

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
Clone this wiki locally