计算猪的百分比

时间:2017-02-24 15:18:29

标签: apache-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.$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),我会得到个人计数。

这里我需要这笔个人数的百分比。

提前致谢。

2 个答案:

答案 0 :(得分:1)

  

这里我需要这笔个人数的百分比。

要做到这一点,你需要运行两个Pig操作我相信 - 1)首先,如你所说,以一种关系获得个人计数

W 8
H 7 
U 5

2)其次,如前所述在一个关系中计算所有元素

total 20

3)然后你需要CROSS在第一个和第二个(CROSS)中获得的关系,以便你有一个像这样的新关系

W 8 20
H 7 20
U 5 20

4)发布此信息,您可以计算出您想要的百分比。

<强> 更新

以下是我提出的Pig脚本。

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;

答案 1 :(得分:0)

你必须手动完成,

类似

data = foreach data generate *, ((B=='b1')?1:0) AS dummy_b1;
data = foreach data generate *, mean(dummy_b1) AS percentage;