我想构建一个hadoop应用程序,它可以读取一个文件中的单词并在另一个文件中搜索.
如果单词存在 - 它必须写入一个输出文件如果该单词不存在 - 它必须写入另一个输出文件
我在hadoop中尝试了几个例子.我有两个问题
两个文件各约200MB.检查另一个文件中的每个单词可能会导致内存不足.有没有其他方法可以做到这一点?
如何将数据写入不同的文件,因为hadoop的reduce阶段的输出只写入一个文件.是否可以使用过滤器来减少相位以将数据写入不同的输出文件?
谢谢.
我该怎么做:
你最终会得到与不同<missingsources>一样多的reduce-outputs,每个都包含文档中缺少的单词.您可以在'reduce'开头写出<missingsource> 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);
}
Run Code Online (Sandbox Code Playgroud)