Hadoop 在一个文件中搜索另一个文件中的单词

2024-01-12

我想构建一个 hadoop 应用程序,它可以从一个文件读取单词并在另一个文件中搜索。

如果该单词存在 - 它必须写入一个输出文件 如果该单词不存在 - 它必须写入另一个输出文件

我在hadoop中尝试了一些例子。我有两个问题

两个文件每个大约 200MB。检查另一个文件中的每个单词可能会导致内存不足。有没有其他方法可以做到这一点?

由于hadoop的reduce阶段的输出只写入一个文件,如何将数据写入不同的文件。是否可以有一个用于减少阶段的过滤器将数据写入不同的输出文件?

谢谢。


我会怎么做:

  1. 按单词拆分“map”中的值,发出 (, ) (*1)
  2. 你会得到“reduce”:(, )
  3. 检查源列表(两个/所有源可能都很长)
  4. 如果并非所有源都在列表中,则每次都会发出 (, )
  5. job2: job.setNumReduceTasks()
  6. job2:在“map”中发出(
  7. 作业 2:在 'reduce' all (null, ) 中发出 foreach

您最终会得到与不同 一样多的归约输出,每个输出都包含文档中缺失的单词。您可以在“reduce”开头写出 ONCE 来标记文件。

(*1) 如何在地图 (0.20) 中查找来源:

private String localname;
private Text outkey = new Text();   
private Text outvalue = new Text();
...
public void setup(Context context) throws InterruptedException, IOException {
    super.setup(context);

    localname = ((FileSplit)context.getInputSplit()).getPath().toString();
}

public void map(Object key, Text value, Context context)
    throws IOException, InterruptedException {
...
    outkey.set(...);
    outvalue.set(localname);
    context.write(outkey, outvalue);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Hadoop 在一个文件中搜索另一个文件中的单词 的相关文章

随机推荐