2013-10-25 62 views
0

我試圖與豬做一個總結操作。如何在豬拉丁文中「總結」?

例如,我有一個表叫t3

product price country 

A 5 Italy 

B 4 USA 

C 12 France 

A 5 Italy 

B 7 Russia 

我需要做一個總結操作,使用2把鑰匙:productcountry

  1. 我做連擊操作,使用productcountry
  2. 我算算價格,總結了價格值只是其中CONCAT結果重複
  3. 哪裏CONCAT結果不會重複,價格保持不變,如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

如果要計算每個產品和國家的總和,則不需要使用concat函數。只由這兩個領域組成。

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); 

實際上,concat在這裏沒有必要,只是按照預期格式化輸出。

DUMP C 

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

我可以再問一件嗎? 如果我需要'分類'同一張桌子。預期結果可以是: A(A,5,意大利),(A,5,意大利) B(B,4,USA),(B,7,俄羅斯) C(C,12,法國)\t CODE: t2 = LOAD'/home/Desktop/2_table/2_table.data'AS(product:chararray,price:int,country:chararray); A = GROUP t2 BY產品; C = FOREACH A GENERATE組$ 1,COUNT($ 1); STORE C INTO'分類'使用PigStorage('\ t'); 但我收到一個錯誤,豬不喜歡定義$ 1。有沒有其他的方法來定義第一個元素:(A,5,意大利),(A,5,意大利),所以我可以指出A重複2次? – Ale

+0

我不明白你想做什麼,但類似這樣的事情可能會有所幫助:'C = FOREACH A GENERATE組,$ 1,COUNT($ 1);' – Frederic

+0

返回:''(A,{(A,5,Italy ),(A,5,意大利)},2) (B,{(B,4,USA),(B,7,Russia)},2) (C,{(C12,France)}} ,1)'' – Frederic