如何计算然后计算PIG中的总平均值

时间:2015-11-29 14:09:59

标签: apache-pig

我的数据集中的每一行都是销售,我的目标是计算客户在其生命周期内购买的平均时间。

我已经按照这样的方式对clientId进行了分组和计数:

byClientId = GROUP sales BY clientId;
countByClientId = FOREACH byClientId GENERATE group, count($1);

这将创建一个包含2列的表:clientId,Transactions of transactions。

现在,我试图获得第二列的总平均值(即同一客户的销售总体平均值)。我正在使用此代码:

groupCount = GROUP countByClientId all;
avg = foreach groupCount generate AVG($1);

但我收到此错误消息:

[main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1045: 
<line 18, column 31> Could not infer the matching function for org.apache.pig.builtin.AVG 
as multiple or none of them fit. Please use an explicit cast.

如何获得第二列的整体平均值?

1 个答案:

答案 0 :(得分:1)

对于我们来说,输入数据的样本会更简单。我创建了自己的,以确保我的解决方案能够正常工作。您只有一个错误:一旦您将所有架构分组为group:chararray,countByClientId:bag{:tuple(group:chararray,:long)}

所以,$ 1指的是一个包,这就是你无法计算平均值的原因。如果您想要在此包中访问$ 1(这是第二个元素),您有两个选择,$1.$1countByClientId.$1。所以你的最后一行应该是:

avg = foreach groupCount generate AVG(countByClientId.$1);

我希望它很清楚。

相关问题