猪:求和领域
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)
我有一些人口普查数据,其中每一行都有一个数字,表示特定年龄范围(例如,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)