我正在使用Pig获取一个表单的大txt文件
A列|B列|C列|D列|E列|F列|G列
我的目标是接受此输入并按列的不同组合进行分组,以获得如下所示的内容
(A列/B列)|计数(F列)|求和(G列)
(A列/C列)|计数(F列)|求和(G列)
(A列/D列)|计数(F列)|求和(G列)
(B列/C列)|计数(F列)|求和(G列)
我想知道是否有办法构建我的pig代码,以便只需要处理数据的次数尽可能少,因为输入保持不变,而所有变化的都是分组。
在进阶时谢谢。
发布于 2013-06-21 04:49:57
Pig会自动执行此优化。如果您总是将分组应用于原始数据,则所有分组都可以并行完成,并将在单个map-reduce作业中执行。
如果您想对每个分组执行相同的操作,则应该定义一个宏,这样就可以省去一些键入操作。例如:
DEFINE DO_STUFF(input, grp1, grp2) RETURNS result {
grouped = GROUP $input BY ($grp1, $grp2);
$result = FOREACH grouped GENERATE FLATTEN(group), COUNT(grouped.F), SUM(grouped.G);
};
data = LOAD '/path/to/txt' AS (A, B, C, D, E, F, G:int);
W = DO_STUFF(data, A, B);
X = DO_STUFF(data, A, C);
Y = DO_STUFF(data, A, D);
Z = DO_STUFF(data, B, C);https://stackoverflow.com/questions/17222210
复制相似问题