我正在使用MapReduce中的程序。我有两个文件,我想删除file1中存在于file2中的一些信息。每一行都有一个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
我想删除file1中与file2中具有相同键的值。一种方法是将这两个文件作为输入文件,并在映射步骤中生成:(ID, line)
。然后在reduce步骤中,我过滤了这些值。但是,我的文件非常非常大,因此我不能这样做。
或者,如果file1是输入文件,在映射中打开file2并查找该行,然后比较值是否有效?但是,由于我有一百万个密钥,对于每个密钥,我都必须打开file1,因此我认为它会有过多的I/o。
我能做什么?
您可以将映射器的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
您可以从这里开始设计减速器