计算猪的百分比
问题描述:
我有以下要求。计算猪的百分比
测试数据具有以下值。
我需要找出总数中每个字符的百分比。
我试着用下面的查询,但没有成功。
Ex:
W
H
U
U
H
W
U
W
W
H
W
U
H
H
H
U
W
W
W
H
data = LOAD 'location of test data';
grp = GROUP data BY data.$0; // considering only 1 field in this csv.
result = FOREACH grp GENERATE group, COUNT(data.$0)/SUM(data.$0);
由于字段是chararrays
,我不能做字段的总和。
有没有找到一个替代?
如果我使用GROUP ALL,然后是COUNT(数据。$ 0),我得到条目的总数。
如果我使用该字段的GROUP,然后是COUNT(数据。$ 0),我可以得到个人数。
在这里我需要这个总数的个人计数的百分比。
在此先感谢。
答
在这里,我需要这个人计数由总量的比例。
要做到这一点,你需要运行两个猪运营,我相信 - 1)首先,你说让个别计数一个关系
W 8
H 7
U 5
2)其次,你指望所有的元素你一个关于前面提到的
total 20
3)然后你需要跨越的第一和两个(CROSS)获得的关系,使你有一个像这样
0123的新关系W 8 20
H 7 20
U 5 20
4)发布此,就可以计算出你想要的百分比。
更新
下面是我想出了猪脚本。
A = LOAD 'data.txt' using PigStorage('\n');
--DUMP A;
B = GROUP A by $0;
C = FOREACH B GENERATE group, COUNT(A.$0);
--DUMP C;
D = GROUP A ALL;
E = FOREACH D GENERATE group,COUNT(A.$0);
DUMP E;
DESCRIBE C;
DESCRIBE E;
F = CROSS C,E;
G = FOREACH F GENERATE $0,$1,$3,($1*100/$3);
DESCRIBE G;
DUMP G;
答
你必须这样做手工,
像
data = foreach data generate *, ((B=='b1')?1:0) AS dummy_b1;
data = foreach data generate *, mean(dummy_b1) AS percentage;
GRP1 = GROUP BY数据$ 0; individual = FOREACH grp1 GENERATE group,COUNT(data。$ 0); grp2 =组数据ALL; sumation = FOREACH grp2 GENERATE组,COUNT(数据。$ 0); 结果=加入单个BY数据$ 0 FULL OUTER,sumation BY数据$ 0 这是在处理“标量具有多个输出...”时发生错误.. –
您可以检查是否转储个人和求和按预期转储数据。 – Amit
这工作。我必须执行CROSS加入。 –