如何使用 Pig 循环获取唯一值
How to loop using Pig for unique values
我有一个文件,其中包含我想使用 Pig 查询的人口普查信息。
文件格式如下:
ID Name Year Gender State Count
1 Jones 1980 M MA 100
我想获取文件中每年该州的每个名称在该年的百分比
我如何遍历每一年并计算每个州每个名字出现的百分比?
结果应如下所示:
1901 Jones MA 2%
1901 Jones VT 3%
1901 Smith MA 1%
1901 Lee VT 4%
....
....
2016 Jones MA 2%
2016 Jones VT 3%
2016 Smith MA 1%
2016 Lee VT 4%
对于 table 中的每一年,我需要按州对其进行细分,并且在每个州内,我需要根据计数信息计算每个名称的百分比。
您将不得不生成另一个按年状态分组的关系,将数据集与按年、状态的新关系连接起来,然后得到百分比。
见下文。
A = LOAD 'census_data' USING PigStorage('\t') as (int:id,name:chararray,year:chararray,gender:chararray,state:chararray,int:count);
B = GROUP A by (year,state);
C = FOREACH B GENERATE FLATTEN(group) as (year,state),SUM(A.count) as occurances;
D = JOIN A BY (year,state),C BY (year,state);
E = FOREACH D GENERATE A::year,A::name,A::state,CONCAT(A::count/C::occurances,'%'); --If you get an error try A.year,A.name,A.state,CONCAT(A.count/C.occurances,'%');
DUMP E;
我有一个文件,其中包含我想使用 Pig 查询的人口普查信息。
文件格式如下:
ID Name Year Gender State Count
1 Jones 1980 M MA 100
我想获取文件中每年该州的每个名称在该年的百分比
我如何遍历每一年并计算每个州每个名字出现的百分比?
结果应如下所示:
1901 Jones MA 2%
1901 Jones VT 3%
1901 Smith MA 1%
1901 Lee VT 4%
....
....
2016 Jones MA 2%
2016 Jones VT 3%
2016 Smith MA 1%
2016 Lee VT 4%
对于 table 中的每一年,我需要按州对其进行细分,并且在每个州内,我需要根据计数信息计算每个名称的百分比。
您将不得不生成另一个按年状态分组的关系,将数据集与按年、状态的新关系连接起来,然后得到百分比。
见下文。
A = LOAD 'census_data' USING PigStorage('\t') as (int:id,name:chararray,year:chararray,gender:chararray,state:chararray,int:count);
B = GROUP A by (year,state);
C = FOREACH B GENERATE FLATTEN(group) as (year,state),SUM(A.count) as occurances;
D = JOIN A BY (year,state),C BY (year,state);
E = FOREACH D GENERATE A::year,A::name,A::state,CONCAT(A::count/C::occurances,'%'); --If you get an error try A.year,A.name,A.state,CONCAT(A.count/C.occurances,'%');
DUMP E;