标题可能有点困惑,所以我将展示我想要实现的目标。
假设我有一个只有 int 的数据。
10
20
30
40
50
60
70
80
90
数据叫做data.csv什么的
我也是
A = load 'data.csv' using PigStorage(',');
它会把它加载到A
然后我使用这些数据并计算它的平均值。
我做的
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
但它不喜欢我使用数据变量来进行过滤器比较。
我该如何实现?
最佳答案
生成原始数据和平均值,然后进行过滤:
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
将是您所有的原始行,并将平均值附加为第二个字段。
关于hadoop - 使用结果数据筛选另一个数据,Hadoop Pig。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17309731/