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 - 计算字段的总数百分比的主要内容,如果未能解决你的问题,请参考以下文章

excel如何计算占总数的百分比

Delphi DBGrid 中计算的百分比

在 MS ACCESS 中查找完成的字段百分比

用 JavaScript 计算百分比

使用mysql查询计算连续缺席总数和百分比计算

计算 SAS 可视化分析中行总数的百分比