在Pig中使用Aggregate函数

问题描述 投票:0回答:2

我的输入文件如下

a1,1,on,400 

a1,2,off,100

a1,3,on,200

如果$ 2等于“on”,我只需要加3美元。我已经编写了如下脚本,之后我不知道如何继续。仅添加3美元我需要应用一些过滤器。添加1美元,根本没有过滤器

有人可以帮我完成这个。

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

我需要输出如下

a1,6,600

apache-pig
2个回答
1
投票

这是一个可能的解决方案,

你可以做这样的事情(未经测试):

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

这应该够了吧


0
投票

试试这个

myinput = LOAD '/home/gopalkrishna/PIGPRAC/pig-sum.txt' using PigStorage(',') as (name:chararray,num:int,stat:chararray,amt:int);


A = GROUP myinput BY name;

B = FOREACH A GENERATE group, SUM(myinput.num),SUM(myinput.amt);


STORE B INTO 'SUMOUT';
© www.soinside.com 2019 - 2024. All rights reserved.