我有一张有两列的table(code:chararray,sp:双)
我想计算每个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\u mind给出了很好的建议,我能够得到上面的输出。请参阅使用pig拉丁语计算百分比
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拉丁语的建议?
1条答案
按热度按时间v7pvogib1#
想想这个。。。
是什么
60.0/8546556
? 一个非常小的数字。。。如你所见,小到需要一个E -6
.因此,您的代码工作正常,因为它将0.000007舍入到两个小数位,并显示0。