我正在使用Pig来获取表单的一个大txt文件
A栏| B列| C栏|上校D |上校E |上校|上校
我的目标是采用此输入并按列的各种组合进行分组,以获得类似的内容
(颜色A /颜色B)| Count(Col F)|总和(Col G)
(Col A / Col C)| Count(Col F)|总和(Col G)
(Col A / Col D)| Count(Col F)|总和(Col G)
(Col B / Col C)| Count(Col F)|总和(Col G)
我想知道是否有结构我的 pig 代码的方法,以便只需要处理数据最少的次数,因为输入保持不变并且所有更改的都是分组。
先谢谢了。
最佳答案
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);
关于hadoop - PIG-从一个大型输入中优化各种分组结构的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17222210/