使用PIG拉丁计算百分比和铸造

时间:2016-07-16 19:34:16

标签: apache-pig

我有一个包含两列的表(代码: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的建议?

1 个答案:

答案 0 :(得分:0)

想一想......

什么是60.0/8546556?一个非常小的数字...正如你所看到的那样,它是如此之小以至于它需要一个E -6

所以你的代码工作正常,因为它将0.000007舍入到两位小数并显示为0。