2015-02-05 65 views
1

我有一些人口普查数据,其中每行有一个数字表示某个年龄段(例如,5岁以下,5至17岁等)人数的县和领域。在我删除不需要的列的一些初始处理之后,我按照以下方式将标记的数据分组(标记数据是模式{县:chararray,pop1:int,pop2:int,pop3:int,pop4:int,pop5:int, pop6:int,pop7:int,pop8:int}):猪:总结字段

grouped_data = GROUP filtered_data BY county;

所以grouped_data是架构

{组:chararray,filtered_data:{(县:chararray,POP1:INT,POP2:INT,POP3:INT,POP4:INT,pop5:INT,POP6:INT ,pop7:int,pop8:int)}}

现在我想总结每个县的所有pop字段,得出每个县的总人口。我敢肯定的命令来做到这将是形式

pop_sums = FOREACH grouped_data GENERATE组,SUM(一些关于流行领域)的;

但我一直无法得到这个工作。提前致谢!

我不知道这是有帮助的,但下面是grouped_data的代表性项:

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

注147条目实际上是县代码,而不是人口。因此他们是chararray类型的。

回答

1

你可以尝试下面的方法吗?

样品输入:

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)