计算pig中的百分比

mcvgt66p  于 2021-06-21  发布在  Pig
关注(0)|答案(2)|浏览(529)

我有以下要求。
测试数据具有以下值。
我需要找出每个字符在总数中所占的百分比。
我尝试过下面的查询,但没有成功。

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(data.$0),我得到条目的总数。
如果我使用一组字段,后跟count(data.$0),我得到单个count。
这里我需要的是这个个体的百分比。
提前谢谢。

fcg9iug3

fcg9iug31#

你必须手动操作,
像这样的

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

41zrol4v2#

这里我需要的是这个个体的百分比。
要做到这一点,您需要运行两个清管器操作,我相信-1)首先,正如您所说,在一个关系中获取单个计数

W 8
H 7 
U 5

2) 第二,您计算前面提到的一个关系中的所有元素

total 20

3) 然后你需要把在第一个和第二个(交叉)中得到的关系交叉,这样你就有了这样一个新的关系

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;

相关问题