hadoop - 使用结果数据筛选另一个数据,Hadoop Pig。

标签 hadoop apache-pig hdfs

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

假设我有一个只有 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/

相关文章:

hadoop - 带文本文件的单词计数

Java Mapreduce 排序复合值

hadoop - 文件或目录如何存储在 hadoop hdfs 中

hadoop - HDFS小文件设计

R Reducer 在 Amazon EMR 中无法正常工作

Java Mapreduce - 获取匹配的文件名并打印到输出文件

hadoop - Pig Latin 中的 Apache Pig 查询所用的 Cpu 时间

android - 将 Apache Pig 导入 Android 项目导致 "Unable to execute dex: Java heap space"错误

hadoop - 使用 pig latin 选择不同的计数

hadoop - 在 Hadoop 中同时对同一个文件使用两个映射器