使用 PIG latin 计算百分比和铸造
Calculating Percentage and casting using PIG latin
我有一个包含两列的 table(代码:chararray,sp:double)
我想计算每个sp的百分比
输入
t001 60.0
a002 75.0
a003 34.0
bb04 56.0
bbc5 23.0
cc2c 45.0
ddc5 45.0
期望的输出:
code Perc
t001 17%
a002 22%
a003 10%
bb04 16.5%
bbc5 6%
cc2c 13.3%
ddc5 13.3%
这里@inquisitive_mind给了很好的建议,我得到了上面的输出。参见
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;
但是当我 运行 更大的数据集时。即将输出,但第二个字段为 0。请参阅示例输出:
at001 0%
a102 0%
a203 0%
bc04 0%
bbc5 0%
c42c 0%
d6c5 0%
如何使用更大的数据库获得正确的输出,或者上面的代码中是否有使用 pig latin 的建议?
想一想……
什么是60.0/8546556
?一个非常小的数字...如您所见,它是如此之小以至于需要 E -6
。
所以您的代码工作正常,因为它将 0.000007 四舍五入到小数点后两位并显示 0。
我有一个包含两列的 table(代码:chararray,sp:double)
我想计算每个sp的百分比
输入
t001 60.0
a002 75.0
a003 34.0
bb04 56.0
bbc5 23.0
cc2c 45.0
ddc5 45.0
期望的输出:
code Perc
t001 17%
a002 22%
a003 10%
bb04 16.5%
bbc5 6%
cc2c 13.3%
ddc5 13.3%
这里@inquisitive_mind给了很好的建议,我得到了上面的输出。参见
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;
但是当我 运行 更大的数据集时。即将输出,但第二个字段为 0。请参阅示例输出:
at001 0%
a102 0%
a203 0%
bc04 0%
bbc5 0%
c42c 0%
d6c5 0%
如何使用更大的数据库获得正确的输出,或者上面的代码中是否有使用 pig latin 的建议?
想一想……
什么是60.0/8546556
?一个非常小的数字...如您所见,它是如此之小以至于需要 E -6
。
所以您的代码工作正常,因为它将 0.000007 四舍五入到小数点后两位并显示 0。