2014-07-08 60 views
0
使用聚合函數

我輸入文件低於

a1,1,on,400 

a1,2,off,100 

a1,3,on,200 

我需要添加$ 3僅當$ 2等於「開」。我有如下寫好的劇本,之後,我不知道如何繼續。僅需要添加$ 3,我需要應用一些過濾器。加1美元根本沒有過濾器

有人可以幫我完成這個。

myinput = LOAD 'file' USING PigStorage(',') AS(id:chararray,flag:chararray,amt:int) 
grouped = GROUP myinput BY id 

我需要輸出如下

A1,6600

+1

搜索'FILTER'和'COUNT' [here](http://pig.apache.org/docs/r0.8.1/piglatin_ref2.html#COUNT)。這應該引導你回答你的問題。 – gobrewers14

+0

好的。我通過在每個元組的中間引入一個新原子來調整我的輸入文件。現在可以幫助我 –

+0

繼續討論GoBrewers14的評論,還查找嵌套的'FOREACH'。 –

回答

0

這裏是一個可能的解決方案,

你可以做這樣的事情(未測試):

myinput = LOAD 'file' USING PigStorage(','); 
A = FOREACH myinput GENERATE $0 as id, $1 as first_sum, (($2 == 'on') ? $3 : 0) as second_sum; 
grouped = GROUP A BY id; 
RESULT = FOREACH grouped GENERATE group as id, SUM($1.first_sum), SUM($1.second_sum); 

應該這樣做: