以下猪拉丁文:
data = load 'access_log_Jul95' using PigStorage(' ') as (ip:chararray, dash1:chararray, dash2:chararray, date:chararray, date1:chararray, getRequset:chararray, location:chararray, http:chararray, code:int, size:int);
splitDate = foreach data generate size as size:int , ip as ip, FLATTEN(STRSPLIT(date, ':')) as h;
groupedIp = group splitDate by h.$1;
a = foreach groupedIp{
added = foreach splitDate generate SUM(size); --
generate added;
};
describe a;
给我错误:
ERROR 1045:
<file 3.pig, line 10, column 39> Could not infer the matching function for org.apache.pig.builtin.SUM as multiple or none of them fit. Please use an explicit cast.
这个错误让我觉得我需要将大小转换为int,但如果我描述我的groupedIp
字段,我会得到以下架构。
groupedIp: {group: bytearray,splitDate: {(size: int,ip: chararray,h: bytearray)}}
表示size是一个int,并且应该能够被sum函数使用。
我是否错误地调用了sum函数?如果您想查看其他任何内容,请告诉我,例如输入文件。
答案 0 :(得分:4)
SUM作为输入在包上运行,但您将其传递给“size
”字段。
尝试消除嵌套的foreach并使用:
a = foreach groupedIp generate SUM(splitDate.size);
答案 1 :(得分:1)
执行一些数据转储。我打赌size
列中的一些东西是非整数的,而猪遇到它并死掉。您也可以编写自己的isInteger udf来在剩余的处理之前检查它,并抛弃任何不是整数。
答案 2 :(得分:1)
SUM
,AVG
和COUNT
是始终在行李上工作的功能,因此将数据分组,然后加入原始集合,如下所示:
A = load 'nyse_data.txt' as (exchange:chararray, symbol:chararray,date:chararray, pen:float,high:float, low:float, close:float,volume:int, adj_close:float);
G = group A by symbol;
C = foreach G generate group, SUM(A.open);