我和你一起工作 Pig 0.12.1
以及 Map-R
. 我试图找到最大的一个领域后,分组的关系在其他一些领域。请参阅下面的pig脚本和注解中的关系结构-
r1 = foreach SomeRelation generate flatten(group) as (c1 , c2);
-- r1: {c1: biginteger,c2: biginteger}
r2 = group r1 by c1;
-- r2: {group: chararray,r1: {(c1: chararray,c2: biginteger)}}
DUMP r2;
/* output -
1234|{(1234,9876)}
2345|{(2345,8765)}
3456|{(3456,7654)}
4567|{(4567,6543)}
* /
r3 = foreach r2 generate group as c1, MAX(r1.c2) as c2;
我得到以下错误
Could not infer the matching function for org.apache.pig.builtin.MAX as multiple or none of them fit. Please use an explicit cast.
脚本说明-
我将某个关系的群展平成c1,c2,然后在c1上重新分组,生成每个c1群的最大c2。
请建议。
3条答案
按热度按时间vmdwslir1#
好吧,问题似乎是pig不允许在biginteger上使用max(或sum等聚合函数)。必须使用long作为数据类型才能工作。参考以下内容-
奇怪的是,没有文档像biginteger和bigdecimal那样强调这一点。
slsn1g292#
我们现在知道问题是max无法处理biginteger。
您应该能够像这样分组并获得最大值,并将结果与订单+限制的组合进行比较:
dgiusagp3#
我不确定你是否可以在flatten下使用group关键字。另外,你是否考虑过在将组扁平化之前将其标记化。例如:
这实际上是用于字数计算的,您可以在此基础上根据您想要做的事情找到最大值。