使用 PIG latin 计算百分比
Calculating percentage using PIG latin
我有一个包含两列的 table(代码:chararray,sp:double)
我想计算每个sp的百分比
INPUT
t001 60
a002 75
a003 34
bb04 56
bbc5 23
cc2c 45
ddc5 45
期望的输出:
code Perc
t001 17%
a002 22%
a003 10%
bb04 16.5%
bbc5 6%
cc2c 13.3%
ddc5 13.3%
我这样试过,但没有输出。
A = load '....' as (code : chararray, sp : double);
B = GROUP A BY (code);
allcount = FOREACH B GENERATE SUM(A.speed) as total;
perc = FOREACH A GENERATE code,speed/(double)allcount.total * 100;
dump perc;
我如何使用猪拉丁语?
您正在将第二列加载到一个名为 sp 的字段中,但将其称为 speed.I 假设这些列由单个 while space 分隔,如果它是一个选项卡,则使用 PigStorage ('\t') 在 LOAD 语句中。
A = LOAD '/YourFilePath/YourFile.txt' USING PigStorage(' ') AS (code:chararray, sp:double);
B = GROUP A ALL;
C = FOREACH B GENERATE SUM(A.sp) AS total;
D = FOREACH A GENERATE code,ROUND_TO((sp/(double)C.total) * 100,2) AS perc;
E = FOREACH D GENERATE code,CONCAT((chararray)perc,'%');
DUMP E;
输出:
我有一个包含两列的 table(代码:chararray,sp:double)
我想计算每个sp的百分比
INPUT
t001 60
a002 75
a003 34
bb04 56
bbc5 23
cc2c 45
ddc5 45
期望的输出:
code Perc
t001 17%
a002 22%
a003 10%
bb04 16.5%
bbc5 6%
cc2c 13.3%
ddc5 13.3%
我这样试过,但没有输出。
A = load '....' as (code : chararray, sp : double);
B = GROUP A BY (code);
allcount = FOREACH B GENERATE SUM(A.speed) as total;
perc = FOREACH A GENERATE code,speed/(double)allcount.total * 100;
dump perc;
我如何使用猪拉丁语?
您正在将第二列加载到一个名为 sp 的字段中,但将其称为 speed.I 假设这些列由单个 while space 分隔,如果它是一个选项卡,则使用 PigStorage ('\t') 在 LOAD 语句中。
A = LOAD '/YourFilePath/YourFile.txt' USING PigStorage(' ') AS (code:chararray, sp:double);
B = GROUP A ALL;
C = FOREACH B GENERATE SUM(A.sp) AS total;
D = FOREACH A GENERATE code,ROUND_TO((sp/(double)C.total) * 100,2) AS perc;
E = FOREACH D GENERATE code,CONCAT((chararray)perc,'%');
DUMP E;
输出: