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

How to count and then compute the total average in PIG

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

我已经按照clientId这样分组统计了:

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

这将创建一个包含 2 列的 table:clientId、交易计数。

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

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

但我收到此错误消息:

[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.

如何获取第二列的总体平均值?

输入数据样本对我们来说会更简单。我创建了自己的数据,以确保我的解决方案有效。您只有一个错误:一旦您将所有模式分组,就变成 group:chararray,countByClientId:bag{:tuple(group:chararray,:long)}

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

avg = foreach groupCount generate AVG(countByClientId.);

我希望清楚。