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

时间:2019-02-16 01:37:49

标签: filter group-by apache-pig distinct-values

让我们说我有一个包含以下各列(A,B,C)的表

我将如何编写Pig语句以在列(A)上创建分组依据。然后过滤count(column B> 100)and count(distinct(column C)> 3)的位置?

根据我所拥有的:

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

filter_column = FILTER data by b > 100;

然后在A上进行了分组:

group_1 = GROUP filter_column by A;

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

1 个答案:

答案 0 :(得分: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),则应首先应用该过滤器。