2013-10-25 2 views
0

돼지와 함께 요약 작업을하려고합니다.돼지 라틴어에서 '요약'하는 방법?

예를 들어, 나는 테이블이 t3라고 있습니다 productcountry :

product price country 

A 5 Italy 

B 4 USA 

C 12 France 

A 5 Italy 

B 7 Russia 

내가이 키를 사용하여 대한 요약 작업을 할 필요가있다.

  1. 나는
  2. CONCAT 결과가 반복되지 않습니다
  3. , 가격은에서와 동일하게 유지 나는 CONCAT 결과가 반복 단지 가격 값을 요약, 가격을 계산해야 product
  4. country를 사용하여, CONCATENATE 작업을 할 t3 테이블.

예상 출력 수 :

돼지에서
CONCAT Price_1 
AItaly 10 
BUSA 4 
CFrance 12 
BRussia 7 

내가 스크립트 다음 쓰기 (코드는 잘못이지만, 단지 아이디어 보여주기 위해) :

t3 = LOAD '/home/Desktop/3_table/3_table.data' AS (product:chararray, price:int, country:chararray); 



c1 = FOREACH t3 GENERATE CONCAT(product, country); 


c2 = FOREACH t3 GENERATE *, c1; 

product_1 = GROUP c2 BY c1; 
price_1 = FOREACH product_1 GENERATE group, SUM(product_1.price); 

STORE price_1 INTO 'summarise_by_2_ID' USING PigStorage('\t'); 

어쩌면 누군가가 설명 할 수 있습니다 기대 한 결과를 얻는 방법? 미리 감사드립니다.

답변

0

제품 및 국가 별 합계를 계산하려는 경우 연결 기능을 사용할 필요가 없습니다. 이 두 필드로 그룹화하면됩니다.

A = LOAD 's.txt' USING PigStorage('\t') AS (product:chararray, price:int, country:chararray); 
B = GROUP A BY (product, country); 
C = FOREACH B GENERATE CONCAT(group.product,group.country), SUM(A.price); 

실제로 여기는 연결이 필요하지 않으며 예상대로 출력을 포맷합니다.

DUMP C 

(AItaly,10) 
(BUSA,4) 
(BRussia,7) 
(CFrance,12) 
+0

한 가지 더 물어볼 수 있습니까? 동일한 테이블을 '분류'해야하는 경우. 예상 결과는 A (A, 5, Italy), (A, 5, 이탈리아) B (B, 4, 미국) C (C, 12, 프랑스) \t 코드 : t2 = LOAD '/home/Desktop/2_table/2_table.data'그대로 (제품 : chararray, 가격 : int, 국가 : chararray); A = GROUP t2 BY 제품; C = FOREACH A GENERATE 그룹 $ 1, COUNT ($ 1); C를 '분류'USING PigStorage ('\ t')에 보관하십시오. 하지만 돼지는 diffinition $ 1을 좋아하지 않습니다. 첫 번째 요소를 정의하는 다른 방법이 있습니까 : (A, 5, Italy), (A, 5, Italy), 그래서 repeatc를 두 번 계산할 수 있습니까? – Ale

+0

나는 당신이하고 싶은 것을 정확히 이해하지 못하지만, 이렇게 도움을 줄 수 있습니다 :'C = FOREACH A GENERATE group, $ 1, COUNT ($ 1);' – Frederic

+0

는''(A, {(A, 5, Italy (C, {(C, 12, France)}, (A, 5, Italy)}), 2) (B, {(B, 4, 미국), (B, 7, 러시아)}, 2) , 1)'' – Frederic

관련 문제