如何过滤hadoop mapreduce中文件的记录值?

时间:2013-04-25 14:08:35

标签: hadoop mapreduce

我正在使用MapReduce中的程序。我有两个文件,我想删除file2中存在的file1中的一些信息。每行都有一个ID作为其键,一些数字(以逗号分隔)作为其值。

file1:
1    1,2,10
2    2,7,8,5
3    3,9,12

file2:
1    1
2    2,5
3    3,9

我想要这样的输出:

output:    
1    2,10
2    7,8
3    12 

我想删除file2中具有相同键的file1的值。一种方法是将两个文件作为输入文件,并在映射步骤中生成:(ID, line)。然后在reduce步骤中我过滤值。但是,我的文件非常大,因此我不能这样做。

或者,如果file1是输入文件并且在地图中我打开file2并寻找该行然后比较该值会有效吗?但是因为我有一百万个密钥,而且每个密钥都必须打开file1,我认为它会有过多的I / O.

我该怎么办?

1 个答案:

答案 0 :(得分:0)

您可以同时制作mapper的file1和file2输入。在映射器中,您将源(file1或file2)添加到记录中。然后使用二级排序来确保file2中的记录始终排在第一位。因此,减速器的组合输入将如下所示:

1    file2,1
1    file1,1,2,10
2    file2,2,5
2    file1,2,7,8,5
3    file2,3,9
3    file1,3,9,12

您可以从这里进行减速机的设计。