1

我在文件中有两个数据集,其中包含以下数据(每个文件中约 500 百万行):

Dataset1:
a1
a2
a3
a4

Dataset2:
a1
a2

我想在 Dataset1 中找到 Dataset2 中不存在的元素所以,结果应该是:

Dataset3
a3
a4

使用 Hadoop 执行此操作的最佳方法是什么?任何与加入相关的机制、Pig 或其他什么?谢谢。

4

2 回答 2

5

您可以使用 HIVE 轻松完成。
1.创建表
2.加载数据
3.查询,简单的LEFT JOIN:

SELECT Dataset1.a LEFT JOIN Dataset1.a=Dataset2.a WHERE Dataset2.a IS NULL

完毕!GL!

于 2013-03-09T01:58:58.663 回答
4

Pig 使用COGROUP操作符很容易做到这一点:

dataset1 = LOAD '/path/to/dataset1' USING PigStorage('\n') AS (line:chararray);
dataset2 = LOAD '/path/to/dataset2' USING PigStorage('\n') AS (line:chararray);

grpd = COGROUP dataset1 BY line, dataset2 BY line;
d1_only = FOREACH (FILTER grpd BY IsEmpty(dataset2)) GENERATE FLATTEN(dataset1);
于 2013-03-10T01:02:36.803 回答