2015-02-05 66 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)