计算猪的百分比
Calculate percentage in pig
我有以下要求。
测试数据有以下值。
我需要找出每个字符占总数的百分比。
我尝试了以下查询,但没有成功。
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.[=10=]; // considering only 1 field in this csv.
result = FOREACH grp GENERATE group, COUNT(data.[=10=])/SUM(data.[=10=]);
由于字段是chararrays
,我无法对字段求和。
有替代品吗?
如果我使用 GROUP ALL,然后使用 COUNT(data.$0),我会得到条目总数。
如果我使用字段的 GROUP,然后是 COUNT(data.$0),我会得到个人计数。
这里我需要这个个体计数占总和的百分比。
提前致谢。
您必须手动执行此操作,
类似
data = foreach data generate *, ((B=='b1')?1:0) AS dummy_b1;
data = foreach data generate *, mean(dummy_b1) AS percentage;
Here i need the percentage of this individual count by the sum.
要做到这一点,您需要 运行 我相信两次 Pig 操作 -
1)首先如您所说,获得一个关系中的个体计数
W 8
H 7
U 5
2)其次,你在一个关系中计算你前面提到的所有元素
total 20
3) 然后你需要CROSS first和two (CROSS)得到的关系,这样你就有了这样一个新的关系
W 8 20
H 7 20
U 5 20
4) Post这个,你可以计算你想要的百分比。
更新
下面是我想出的 Pig 脚本。
A = LOAD 'data.txt' using PigStorage('\n');
--DUMP A;
B = GROUP A by [=13=];
C = FOREACH B GENERATE group, COUNT(A.[=13=]);
--DUMP C;
D = GROUP A ALL;
E = FOREACH D GENERATE group,COUNT(A.[=13=]);
DUMP E;
DESCRIBE C;
DESCRIBE E;
F = CROSS C,E;
G = FOREACH F GENERATE [=13=],,,(*100/);
DESCRIBE G;
DUMP G;
我有以下要求。
测试数据有以下值。
我需要找出每个字符占总数的百分比。
我尝试了以下查询,但没有成功。
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.[=10=]; // considering only 1 field in this csv.
result = FOREACH grp GENERATE group, COUNT(data.[=10=])/SUM(data.[=10=]);
由于字段是chararrays
,我无法对字段求和。
有替代品吗?
如果我使用 GROUP ALL,然后使用 COUNT(data.$0),我会得到条目总数。
如果我使用字段的 GROUP,然后是 COUNT(data.$0),我会得到个人计数。
这里我需要这个个体计数占总和的百分比。
提前致谢。
您必须手动执行此操作,
类似
data = foreach data generate *, ((B=='b1')?1:0) AS dummy_b1;
data = foreach data generate *, mean(dummy_b1) AS percentage;
Here i need the percentage of this individual count by the sum.
要做到这一点,您需要 运行 我相信两次 Pig 操作 - 1)首先如您所说,获得一个关系中的个体计数
W 8
H 7
U 5
2)其次,你在一个关系中计算你前面提到的所有元素
total 20
3) 然后你需要CROSS first和two (CROSS)得到的关系,这样你就有了这样一个新的关系
W 8 20
H 7 20
U 5 20
4) Post这个,你可以计算你想要的百分比。
更新
下面是我想出的 Pig 脚本。
A = LOAD 'data.txt' using PigStorage('\n');
--DUMP A;
B = GROUP A by [=13=];
C = FOREACH B GENERATE group, COUNT(A.[=13=]);
--DUMP C;
D = GROUP A ALL;
E = FOREACH D GENERATE group,COUNT(A.[=13=]);
DUMP E;
DESCRIBE C;
DESCRIBE E;
F = CROSS C,E;
G = FOREACH F GENERATE [=13=],,,(*100/);
DESCRIBE G;
DUMP G;