ApachePig—在过滤器中使用生成的数据作为另一个数据HadoopPig

wdebmtf2  于 2021-06-04  发布在  Hadoop
关注(0)|答案(1)|浏览(299)

标题可能有点混乱,所以我将展示我想要实现的目标。
假设我有一个只有int的数据。

10
20
30
40
50
60
70
80
90

这个数据叫做data.csv之类的
我也是

A = load 'data.csv' using PigStorage(',');

它会把它加载到
然后我用这些数据计算平均值。
我就是这么做的

B = foreach A generate int;
C = group B all;
avg = foreach C generate AVG(B.int);

(忽略小的语法错误,你就明白了)
所以如果我转储avg,我会得到一个整数,代表数据a的平均值。
所以,现在我想做的是
通过仅具有高于平均值的数据来过滤掉数据a。
像这样的事情

X = filter A by int > avg

但它不喜欢我使用数据变量来进行过滤器比较。
我应该如何做到这一点?

t30tvxxf

t30tvxxf1#

生成原始数据和平均值,然后过滤:

A = load 'data.csv' using PigStorage(',');
B = foreach A generate int;
C = group B all;
D = foreach C generate FLATTEN(B.int), AVG(B.int) AS avg;
E = filter D by int > avg;

关系 D 将所有原始行的平均值作为第二个字段追加。

相关问题