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

问题描述 投票:0回答:1

假设我有一个包含以下列的表(A,B,C)

如何在列(A)上编写一个pig语句来创建一个组。然后过滤计数(列B> 100)和计数(不同(列C)> 3)?

从我拥有的:

我首先删除了B小于100的计数

filter_column = FILTER data by b > 100;

然后在A上做了一组:

group_1 = GROUP filter_column by A;

我现在如何过滤这个group_1,其中C列中不同值的计数> 3?

filter group-by apache-pig distinct-values
1个回答
0
投票

要实现此目的,您可以在过滤值之前先聚合(计算列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),则应首先应用该过滤器。

© www.soinside.com 2019 - 2024. All rights reserved.