关于猪拉丁语和函数的误差1045

时间:2013-05-06 18:53:35

标签: java sum apache-pig

以下猪拉丁文:

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函数?如果您想查看其他任何内容,请告诉我,例如输入文件。

3 个答案:

答案 0 :(得分:4)

SUM作为输入在上运行,但您将其传递给“size”字段。
尝试消除嵌套的foreach并使用:

a = foreach groupedIp generate SUM(splitDate.size);

答案 1 :(得分:1)

执行一些数据转储。我打赌size列中的一些东西是非整数的,而猪遇到它并死掉。您也可以编写自己的isInteger udf来在剩余的处理之前检查它,并抛弃任何不是整数。

答案 2 :(得分:1)

SUMAVGCOUNT是始终在行李上工作的功能,因此将数据分组,然后加入原始集合,如下所示:

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