【问题标题】:How to filter minimum distinct values in a group by?如何过滤组中的最小不同值?
【发布时间】:2019-07-10 04:07:24
【问题描述】:
假设我有一个包含以下列 (A,B,C) 的表格
我将如何编写一个 pig 语句来在列 (A) 上创建一个分组依据。然后过滤 where count(column B > 100) 和 count of (distinct(column C) > 3) ?
从我所拥有的:
我首先删除了 B 小于 100 的计数
filter_column = FILTER data by b > 100;
然后在A上做了一个分组:
group_1 = GROUP filter_column by A;
如果 C 列中不同值的计数 > 3,我现在如何过滤这个 group_1?
【问题讨论】:
标签:
filter
group-by
apache-pig
distinct-values
【解决方案1】:
为此,您可以先聚合(计数 B 列和不同的 C 列),然后再过滤值。
dataAggregated = FOREACH (GROUP data BY col_a) {
uniqC = DISTINCT data.col_c;
GENERATE
FLATTEN(group) AS col_a,
COUNT(data.col_b) AS b_count,
COUNT(uniqC) AS uniq_c_count; }
;
dataFiltered = FILTER dataAggregated BY b_count > 100 AND uniq_c_count > 3;
过滤标量(B 列)不会产生与过滤聚合(计数 B 列)相同的结果。如果您希望对满足标准列 B > 100 的记录进行聚合(计数唯一列 C),则应首先应用该过滤器。