0

标题可能有点混乱,所以我将展示我想要实现的目标。

所以说我有一个只有 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

但它不喜欢我使用数据变量进行过滤比较。

我应该如何做到这一点?

4

1 回答 1

2

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

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将是您的所有原始行,平均值作为第二个字段附加。

于 2013-06-26T00:39:34.297 回答