我有一些人口普查数据,其中每一行都有一个数字表示县和某个年龄范围内人数的字段(例如,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类型。
答案 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)