Pig - 计算字段总数的百分比

时间:2013-03-10 04:03:11

标签: apache-pig

我正在尝试计算字段中值的总计百分比。

例如,对于数据(名称,ct)

(约翰,1000) (Dan,2000) (liz,2000)

我希望输出为(名称,ct占总数的百分比)

(约翰,.2) (丹,.4) (liz,.4)

data  = load 'fakedata.txt' as (name:chararray,sqr:chararray,ct:int);
A = foreach data generate name, ct;
A = FILTER A by ct is not null;
B = group A all;
C = foreach B generate SUM(A.ct) as tot;
D = foreach A generate name, ct/(double)C.tot;
dump D;

错误org.apache.pig.tools.grunt.Grunt - 错误1000:解析期间出错。无效别名:C in {name:bytearray,ct:int}

我正在密切关注http://pig.apache.org/docs/r0.10.0/basic.html中给出的内容 部分中的示例代码 - “将关系转换为标量”

如果我说转储C,则输出正确生成为5000.所以D中存在问题。非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

以下适合我,没有任何错误。这基本上和你的一样。不确定为什么会收到此错误。您使用的是哪个版本的猪?

data = load 'StackData' as (name:chararray, marks:int);
grp = GROUP data all;
allcount = foreach grp generate SUM(data.marks) as total;
perc = foreach data generate name, marks/(double)allcount.total;
dump perc

答案 1 :(得分:0)

在关系D中,您再次循环关系A - 它知道了解C

我建议计算SUM,然后进行JOIN,这样每个条目都包含总和。这样您就可以计算每个条目的总百分比。