我有一个包含两列的表(代码:chararray,sp:double)
我想计算每个sp的百分比。
INPUT
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给出了很好的建议,我得到了上面的输出。见Calculating percentage using PIG latin
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的建议?
答案 0 :(得分:0)
想一想......
什么是60.0/8546556
?一个非常小的数字...正如你所看到的那样,它是如此之小以至于它需要一个E -6
。
所以你的代码工作正常,因为它将0.000007舍入到两位小数并显示为0。