猪:总结领域

时间:2015-02-05 22:51:17

标签: apache-pig

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

grouped_data = GROUP filtered_data BY县;

所以grouped_data属于架构

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

现在我想总结每个县的所有流行音乐场,产生每个县的总人口。我非常确定执行此操作的命令的格式为

pop_sums = FOREACH grouped_data GENERATE组,SUM( 关于pop字段的内容 );

但我一直无法让这个工作。提前谢谢!

我不知道这是否有用,但以下是grouped_data的代表性条目:

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

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

1 个答案:

答案 0 :(得分: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)