Fre*_*Ren 0 apache-pig reducers
在Pig中,获得计数的有效方法是什么?我们可以做一个GROUP ALL,但这只给了1个reducer.当数据量非常大时,比如n太字节,我们能以某种方式尝试多个减速器吗?
dataCount = FOREACH (GROUP data ALL) GENERATE
'count' as metric,
COUNT(dataCount) as value;
Run Code Online (Sandbox Code Playgroud)
GROUP ALL您可以将其分为两个步骤,而不是直接使用a .首先,按一些字段分组并计算行数.然后,执行a GROUP ALL来总结所有这些计数.这样,您就可以并行计算行数.
但请注意,如果您在第一个字段中使用的字段GROUP BY没有重复项,则结果计数将全部为1,因此不会有任何差异.尝试使用具有许多重复项的字段来提高其性能.
看这个例子:
a;1
a;2
b;3
b;4
b;5
Run Code Online (Sandbox Code Playgroud)
如果我们首先按第一个字段分组,该字段有重复,则最终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)
Run Code Online (Sandbox Code Playgroud)
但是,如果我们按第二个分组,这是唯一的,它将处理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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9869 次 |
| 最近记录: |