【问题标题】:generating maximum number using pig使用 pig 生成最大数量
【发布时间】:2014-02-21 02:26:32
【问题描述】:

我试图为以下数据找到 generate year , MAX(number) ,它给了我错误提示

错误 1045:无法将 org.apache.pig.builtin.MAX 的匹配函数推断为多个匹配或都不匹配。请使用显式转换。

我使用了命令

loadfirstoutput = load '/outt/part-r-00000' as (year:chararray, number:chararray); 
foreach2 = foreach loadfirstoutput generate year, MAX(number);  
dump foreach2;

 ERROR 1045: Could not infer the matching function for org.apache.pig.builtin.MAX as multiple or none of them fit. Please use an explicit cast.

"   8
A"  6
"0" 4004
Ng" 1
1)" 1
Co" 5
/i>"    12
#4)"    1
&amp    2
21)"    1
22)"    2
38)"    1
80)"    1
Now"    1
Son"    1
"Unk"   1
Budd"   1
Food"   1
Ginn"   1
Hate"   1
Jax)"   1
Lang"   1
More"   1
Ross"   1
Sans"   1
Sign"   2
Sons"   1
Stan"   1
"1378"  1
"1806"  1
"1900"  2
"1901"  5
"1902"  2
"1904"  1
"1906"  1
"1908"  1
"1909"  2
"1910"  1
"1911"  14
"1914"  1
"1917"  1
"1920"  29
"1921"  2
"1923"  10
"1924"  2

【问题讨论】:

标签: apache-pig


【解决方案1】:

很难判断您的数据发生了什么。但假设它是模式所暗示的,你需要先分组。

loadfirstoutput = load '/outt/part-r-00000' as (name:chararray, year:chararray, number:chararray); 
A = GROUP  loadfirstoutput ALL;
B = FOREACH A GENERATE MAX(loadfirstoutput.number);  
dump B;

这将为您提供最大“数量”

如果你想要每年的最大数量

loadfirstoutput = load '/outt/part-r-00000' as (name:chararray, year:chararray, number:chararray); 
    A = GROUP  loadfirstoutput BY year;
    B = FOREACH A GENERATE MAX(loadfirstoutput.number);  
    dump B;

【讨论】:

    【解决方案2】:

    这并没有回答问题,但是在MAX中混合不同类型的另一种情况发生了同样的错误,如下所示:

    FOREACH fltrd GENERATE ids, MAX(TOBAG(suu, 1)) AS uu;
    

    suu 是一个长字段。

    我必须通过像这样将 L 附加到 1 来将 int 1 转换为 long 1:

    FOREACH fltrd GENERATE ids, MAX(TOBAG(suu, 1L)) AS uu;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-09
      • 1970-01-01
      • 2014-05-11
      • 2016-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多