我正在尝试计算字段中值的总计百分比。
例如,对于数据(名称,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中存在问题。非常感谢任何帮助。
答案 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,这样每个条目都包含总和。这样您就可以计算每个条目的总百分比。