计算百分比和铸造用Pig拉丁语

yhived7q  于 2021-06-21  发布在  Pig
关注(0)|答案(1)|浏览(248)

我有一张有两列的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拉丁语的建议?

v7pvogib

v7pvogib1#

想想这个。。。
是什么 60.0/8546556 ? 一个非常小的数字。。。如你所见,小到需要一个 E -6 .
因此,您的代码工作正常,因为它将0.000007舍入到两个小数位,并显示0。

相关问题