我是一个学生学习如何使用hortonworks沙盒Pig脚本。我的问题是我不能使用 SUM
功能正常。我已经成功地分离了防火墙日志的字段,并且我能够执行多个查询并使用count函数。。。但没什么好运气 SUM
在一个案例中我真正需要的功能。我使用的代码如下:
A = FOREACH logs_base GENERATE device_id,src,src_port,dst,dst_port,tran_ip,tran_port,service,duration,sent,rcvd,sent_pkt,rcvd_pkt,SN,user,group1, REGEX_EXTRACT(date, '\\d{3}-(\\d{2})-\\d{2}', 1) AS(month:chararray);
F1 = FILTER A BY user == 'PR11MS1120' and month == '10';
grpd1 = group F1 by user;
counter = foreach grpd1 {
sum1 = SUM(A.rcvd);
sum2 = SUM(A.sent);
generate sum1, sum2;
};
dump counter;
C = foreach F1 generate rcvd, sent;
dump C;
当我把变量 C
我得到一个显示许多记录的结果,这些记录指示为应用的过滤器接收/发送的数据量。如:
(223,123)
(334,444)
(21,12344)
(...,...)
我真正想做的就是将所有这些记录相加,并显示接收和发送的总数量: (?,?)
.
注意:我已尝试将变量类型更改为 int
, long
,和 chararray
也没有成功。
我在尝试解决此问题时遇到的一些错误是:
无法将org.apache.pig.builtin.sum的匹配函数推断为多个或没有匹配的函数。请使用显式转换。
3条答案
按热度按时间w1jd8yoj1#
请尝试以下方法
hgtggwj02#
首先确保要求和的字段是int类型
使用-
DESCRIBE A;
为了检查之后的数据类型,我认为因为您使用了filter condition,然后在f1上使用了groupby-所以,在总结的时候,你应该用f1而不是a-
使用
DESCRIBE grpd1;
你会明白我想说的,不会有“a”,我想这应该可以解决这个错误。最后,检查你想要的逻辑结果我没有检查过。希望这有帮助。ps-我也是一个学生,对Pig是新的。hrysbysz3#
幸运的是,我对Pig也不熟悉:)
我不确定sum是否可以转换为chararray(这可以解释错误),因此请使用rcvd和sent类型:
int
然后为grpd1行李生成2个总和:注:更多信息请点击此处。
希望我能帮点忙!