1

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

例如,对于数据 (name, 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 中存在问题。非常感谢任何帮助。

4

2 回答 2

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
于 2013-03-10T17:10:27.390 回答
0

在 RelationD中,您A再次循环 Relation - 它知道知道C

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

于 2013-03-10T14:14:28.567 回答