如何过滤组中最小的不同值?

ebdffaop  于 2021-06-24  发布在  Pig
关注(0)|答案(1)|浏览(329)

假设我有一个包含以下列(a,b,c)的表
如何编写pig语句来创建列(a)上的groupby。然后过滤count(b列>100)和count of(distinct(c列)>3)?
从我所拥有的:
我首先去掉b小于100的计数 filter_column = FILTER data by b > 100; 然后在一个 group_1 = GROUP filter_column by A; 如果c列中不同值的计数大于3,我现在如何过滤这个组?

klh5stk1

klh5stk11#

要实现这一点,您可以在筛选值之前首先进行聚合(计算列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的记录进行聚合(count unique column c),那么应该首先应用该过滤器。

相关问题