如何计算并计算 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.$1countByClientId.$1。所以你的最后一行应该是:

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

我希望它很清楚。

【讨论】:

以上是关于如何计算并计算 PIG 中的总平均值的主要内容,如果未能解决你的问题,请参考以下文章

group的加权平均值不等于pandas groupby中的总平均值

Apache Pig 学生成绩平均计算

1查询成绩表的总分数,平均分,最低分和最高分。用sql语句怎么写

猪脚本循环通过计算平均值

如何在Pig中找到一列的平均值和两列的减法平均值?

在 Pig 中使用多个条件过滤列