【问题标题】:Error 1045 on sum function in pig latin with an int带有 int 的猪拉丁语中的 sum 函数出现错误 1045
【发布时间】:2013-05-06 18:53:35
【问题描述】:

以下猪拉丁文脚本:

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.

这个错误让我觉得我需要将 size 转换为 int,但如果我描述我的 groupedIp 字段,我会得到以下架构。

groupedIp: {group: bytearray,splitDate: {(size: int,ip: chararray,h: bytearray)}} 表示 size 是一个 int,应该可以被 sum 函数使用。

我是否错误地调用了 sum 函数?如果您想查看其他任何内容,例如输入文件,请告诉我。

【问题讨论】:

    标签: java sum apache-pig


    【解决方案1】:

    SUMbag 上作为输入进行操作,但您将字段“size”传递给它。
    尝试消除嵌套的 foreach 并使用:

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

    【讨论】:

    • 太棒了,我认为这行得通。但是,我现在收到此错误:java.lang.Exception: java.lang.ClassCastException: java.lang.String cannot be cast to org.apache.pig.data.Tuple。我看不到从字符串创建元组的位置,也不明白为什么 pig 不够聪明,无法将字符串放入新元组,而不是强制转换。
    【解决方案2】:

    对您的数据进行一些转储。我敢打赌size 列中的一些东西是非整数的,Pig 会遇到并死掉。您还可以编写自己的 isInteger udf 代码,以便在其余处理之前检查这一点,并丢弃任何非整数。

    【讨论】:

    • 一个可靠的想法,但似乎最后一行中的所有列都是整数。虽然有一对是 0,但这真的不重要,除非我弄错了。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-28
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多