본문 바로가기

오픈소스/pig

Pig - COGROUP

 GROUP BY 기능과 유사하지만, 좀 더 다양하게 사용이 가능하다. 다만, Aggregate 함수를 거친 이후에는 flatten 등과 같은 함수를 통하지 않으면 정상적인 데이터를 얻을 수가 없는데, 특히 COGROUP의 경우 FLATTEN 함수 사용에 주의가 필요하다.
 
 일반적으로 대부분 Tuple에 대한 연산이 이루어지는 반면 FLATTEN 및 IsEmpty는 Relation을 대상으로 한다. 즉, 킷 값을 기준으로 OUTER-JOIN을 하되 서로 값이 없는 값은 서로 존재하는 값을 취하려고 하는 경우다.

-- pigs/cogroup.pig
a = load 'source/A' using PigStorage(',')
 as (id:int, addr:chararray);

b = load 'source/B' using PigStorage(',')
 as (id:int, addr:chararray);

c = cogroup a by id, b by id; 

d = foreach c generate flatten((IsEmpty(a)?b:a));

e = foreach d generate *;

dump e

describe e


데이터 및 결과는 다음과 같다

-- source/A

1,Abnormal

2,Broad

4,Classic
-- source/B

1,

2,Sanbon

3,Seoul

8,Kyunggi 


grunt> run pigs/cogroup.pig
(1,Abnormal)

(2,Broad)

(3,Seoul)

(4,Classic)

(8,Kyunggi)



 

'오픈소스 > pig' 카테고리의 다른 글

PIG - Exceeded max jobconf size  (0) 2013.06.19
Pig - ROW_NUMBER (RANK)  (0) 2012.11.06
Pig - UPSERT (UPDATE or INSERT)  (0) 2012.11.05