使用 pig 生成最大数量
Posted
技术标签:
【中文标题】使用 pig 生成最大数量【英文标题】:generating maximum number using 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
& 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
【问题讨论】:
pig.apache.org/docs/r0.11.0/func.html#max 【参考方案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;
【讨论】:
以上是关于使用 pig 生成最大数量的主要内容,如果未能解决你的问题,请参考以下文章