Как отфильтровать минимальные отдельные значения в группе? - PullRequest
0 голосов
/ 16 февраля 2019

Допустим, у меня есть таблица со следующими столбцами (A, B, C)

Как бы я написал оператор pig для создания группы по столбцу (A).И затем фильтр, где count (столбец B> 100) и количество (отличный (столбец C)> 3)?

Из того, что у меня есть:

Сначала я удалил счет, где B меньше 100

filter_column = FILTER data by b > 100;

Затем сделал группу на A:

group_1 = GROUP filter_column by A;

Как бы я теперь отфильтровал эту группу_1, где количество различных значений в столбце C> 3?

1 Ответ

0 голосов
/ 05 марта 2019

Для этого вы можете сначала агрегировать (столбец счета 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).Если вы хотите, чтобы агрегация (кол-во уникальных столбцов C) имела место для записей, которые удовлетворяют критерию B> 100, то вам следует сначала применить этот фильтр.

...