猪:求和领域

Pig: Summing Fields

我有一些人口普查数据,其中每一行都有一个数字,表示特定年龄范围(例如,5 岁及以下、5 至 17 岁等)的人数的县和字段。在删除不需要的列的一些初始处理之后,我将标记的数据分组如下(labeled_data 属于模式 {county: chararray,pop1: int,pop2: int,pop3: int,pop4: int, pop5: 整数,pop6: 整数,pop7: 整数,pop8: 整数}):

grouped_data = 按县分组 filtered_data;

所以 grouped_data 属于架构

{group: chararray,filtered_data: {(county: chararray,pop1: int,pop2: int,pop3: int,pop4: int,pop5: int,pop6: int,pop7: int, pop8: 整数)}}

现在我想总结每个县的所有 pop 字段,得出每个县的总人口。我很确定执行此操作的命令将采用

形式

pop_sums = FOREACH grouped_data GENERATE group, SUM(关于流行字段的一些事情);

但我无法让它工作。提前致谢!

不知道有没有用,以下是grouped_data的代表词条:

(147,{(147,385,1005,283,468,649,738,933,977),(147,229,655,178,288,394,499,579,481)})

请注意,这 147 个条目实际上是县代码,而不是人口。因此它们是 chararray 类型。

你能试试下面的方法吗?

示例输入:

147,1,1,1,1,1,1,1,1
147,2,2,2,2,2,2,2,2
145,5,5,5,5,5,5,5,5

PigScript:

A = LOAD 'input' USING PigStorage(',') AS(country:chararray,pop1:int,pop2:int,pop3:int,pop4:int,pop5:int,pop6:int,pop7:int,pop8:int);
B = GROUP A BY country;
C = FOREACH B GENERATE group,(SUM(A.pop1)+SUM(A.pop2)+SUM(A.pop3)+SUM(A.pop4)+SUM(A.pop5)+SUM(A.pop6)+SUM(A.pop7)+SUM(A.pop8)) AS totalPopulation;
DUMP C;

输出:

(145,40)
(147,24)