Apache Pig 区分和计数

Posted

技术标签:

【中文标题】Apache Pig 区分和计数【英文标题】:Apache Pig Distinct and Count 【发布时间】:2017-06-08 16:34:34 【问题描述】:

我正在尝试弄清楚以下问题。

有多少女性用户提供了至少 4 分的评分。我认为我的加入和过滤器是正确的,但我无法弄清楚不同的计数部分已尝试以下多个版本。

a = load '/user/pig/movie' AS (userid:int, movieid:int, rating:int, timestamp:chararray);
b = load '/user/pig/reviewer' using PigStorage('|') AS (userid:int, age:int, gender:chararray, occupation:chararray, zip:chararray);
a1 = filter a by rating == 4;
b1 = filter b by gender == 'F';
c = join a1 by userid, b1 by userid;
d = FOREACH c GENERATE COUNT(DISTINCT(userid));
dump d;

【问题讨论】:

谢谢,我试过了,但出现错误 - 无法使用导入解决 DISTINCT。 【参考方案1】:

您必须在 COUNT 之前进行 GROUP。Ref:COUNT 需要前面的 GROUP ALL 语句用于全局计数和 GROUP BY 语句用于组计数。

d = GROUP c BY userid;
e = FOREACH d GENERATE COUNT(DISTINCT(b1.userid));
dump e;

【讨论】:

感谢您的帮助。我必须按评级而不是用户 ID 进行分组,它起作用了。

以上是关于Apache Pig 区分和计数的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Pig 中创建不区分大小写的匹配?

根据重复计数对集合进行区分和排序

apache Pig 试图在每个组中获得最大计数

Apache pig Store 基于条件

如何在 Postgresql 的窗口函数中“区分”计数?

绘制象限图以根据 X 和 Y 的平均值区分 4 组中的人口并找到最终计数