0

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

我将如何编写一个猪语句来在列(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;

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

4

1 回答 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),则应首先应用该过滤器。

于 2019-03-05T14:01:10.743 回答