Вместо того, чтобы напрямую использовать GROUP ALL
, вы можете разделить его на два шага. Сначала сгруппируйте по полю и посчитайте количество строк. А затем выполните GROUP ALL
, чтобы суммировать все эти подсчеты. Таким образом, вы сможете подсчитать количество строк параллельно.
Обратите внимание, однако, что если поле, которое вы используете в первом GROUP BY
, не имеет дубликатов, все итоговые значения будут равны 1, поэтому никакой разницы не будет. Попробуйте использовать поле, в котором много дубликатов, чтобы повысить его производительность.
См. Этот пример:
a;1
a;2
b;3
b;4
b;5
Если мы сначала сгруппируем по первому полю, в котором есть дубликаты, последний COUNT
будет иметь дело с 2 строками вместо 5:
A = load 'data' using PigStorage(';');
B = group A by $0;
C = foreach B generate COUNT(A);
dump C;
(2)
(3)
D = group C all;
E = foreach D generate SUM(C.$0);
dump E;
(5)
Однако, если мы сгруппируем по второму, уникальному, он будет иметь дело с 5 строками:
A = load 'data' using PigStorage(';');
B = group A by $1;
C = foreach B generate COUNT(A);
dump C;
(1)
(1)
(1)
(1)
(1)
D = group C all;
E = foreach D generate SUM(C.$0);
dump E;
(5)
person
Balduz
schedule
12.05.2015