如何计算并计算 PIG 中的总平均值
Posted
技术标签:
【中文标题】如何计算并计算 PIG 中的总平均值【英文标题】:How to count and then compute the total average in PIG 【发布时间】:2015-11-29 14:09:59 【问题描述】:我的数据集中的每一行都是一次销售,我的目标是计算客户在其一生中的平均购买时间。
我已经像这样按clientId分组和计数了:
byClientId = GROUP sales BY clientId;
countByClientId = FOREACH byClientId GENERATE group, count($1);
这将创建一个包含 2 列的表:clientId、事务计数。
现在,我正在尝试获取第二列的总平均值(即同一客户的总销售额平均值)。我正在使用此代码:
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】:使用输入数据样本对我们来说会更简单。我创建了自己的,以确保我的解决方案能够正常工作。你只有一个错误:一旦你把所有的模式分组,就变成了group:chararray,countByClientId:bag:tuple(group:chararray,:long)
因此,$1 指的是一个袋子,这就是您无法计算平均值的原因。如果您想访问此包中的 $1(这是第二个元素),您有两个选择,$1.$1
或 countByClientId.$1
。所以你的最后一行应该是:
avg = foreach groupCount generate AVG(countByClientId.$1);
我希望它很清楚。
【讨论】:
以上是关于如何计算并计算 PIG 中的总平均值的主要内容,如果未能解决你的问题,请参考以下文章
group的加权平均值不等于pandas groupby中的总平均值