2013-03-10 68 views
1

我正在计算字段值的总计百分比。猪 - 计算字段总数的百分比

例如,对于数据(姓名,CT)

(约翰,1000) (旦,2000) (利兹,2000)

我想要的输出为(姓名,%的克拉总)

(约翰,0.2) (旦,0.4) (利兹,0.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; 

ERROR org.ap ache.pig.tools.grunt.Grunt - 解析期间出错1000:错误。无效的别名:C在{名称:字节组,CT:INT}

它是如何在一节中http://pig.apache.org/docs/r0.10.0/basic.html 的示例代码给我下面究竟 - “铸造到标量的关系”

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

回答

0

关系D,您正在循环关系A - 它知道知道关于C

我会建议计算SUM,然后做JOIN,以便每个条目都包含总和。这样你就可以计算出每个条目的总数。

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