Pig - 计算字段的总数百分比
Posted
技术标签:
【中文标题】Pig - 计算字段的总数百分比【英文标题】:Pig - Calculating percentage of total for a field 【发布时间】:2013-03-10 04:03:10 【问题描述】:我正在尝试计算字段中的值占总数的百分比。
例如对于数据(姓名,ct)
(约翰,1000) (丹,2000) (丽兹,2000 年)
我希望输出为(名称,ct 占总数的百分比)
(约翰, .2) (丹,.4) (丽兹,.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 中给出的方式 一节中的示例代码 - “将关系转换为标量”
如果我说 Dump C,则输出正确生成为 5000。因此 D 中存在问题。非常感谢任何帮助。
【问题讨论】:
【参考方案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
【讨论】:
【参考方案2】:在 Relation D
中,您再次循环 Relation A
- 它知道知道 C
。
我建议先计算 SUM,然后进行 JOIN,这样每个条目都包含总和。这样您就可以计算每个条目的总百分比。
【讨论】:
以上是关于Pig - 计算字段的总数百分比的主要内容,如果未能解决你的问题,请参考以下文章