0

我正在使用 Pig 获取表格的一个大 txt 文件

上校 | 上校 B | 上校 C | 科尔D | 上校 | 上校 F | 科尔G

我的目标是获取这些输入并按列的各种组合进行分组以获得类似的结果

(Col A / Col B) | 计数(Col F) | 总和(Col G)

(Col A / Col C) | 计数(Col F) | 总和(Col G)

(Col A / Col D) | 计数(Col F) | 总和(Col G)

(Col B / Col C) | 计数(Col F) | 总和(Col G)

我想知道是否有办法构建我的猪代码,以便只需要尽可能少地处理数据,因为输入保持不变并且所有正在改变的只是分组。

提前致谢。

4

1 回答 1

1

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);
于 2013-06-20T20:49:57.327 回答