Java 如何在hadoop中为各自的输入文件生成不同的输出文件
我使用了来自net的标准wordcount示例,该示例将多个输入文件输出到单个输出文件中,但我只希望将不同的输入文件输出到它们各自的不同输出文件中。提前感谢。您可以通过以下方式处理需求: -在Mapper中获取文件名并不容易,但可以实现。通过mapper中的以下代码:Java 如何在hadoop中为各自的输入文件生成不同的输出文件,java,hadoop,mapreduce,Java,Hadoop,Mapreduce,我使用了来自net的标准wordcount示例,该示例将多个输入文件输出到单个输出文件中,但我只希望将不同的输入文件输出到它们各自的不同输出文件中。提前感谢。您可以通过以下方式处理需求: -在Mapper中获取文件名并不容易,但可以实现。通过mapper中的以下代码: Path inputPath = null; InputSplit inputSplit = reporter.getInputSplit(); String name = inputSplit.g
Path inputPath = null;
InputSplit inputSplit = reporter.getInputSplit();
String name = inputSplit.getClass().getName();
if ("org.apache.hadoop.mapred.FileSplit".compareTo(name) == 0) {
FileSplit fs = (FileSplit) inputSplit;
inputPath = fs.getPath();
}
if ("org.apache.hadoop.mapred.lib.TaggedInputSplit".compareTo(name) == 0) {
TaggedInputSplit tis = (TaggedInputSplit) inputSplit;
InputSplit iis = tis.getInputSplit();
String iname = iis.getClass().getName();
if ("org.apache.hadoop.mapred.FileSplit".compareTo(iname) == 0) {
FileSplit fs = (FileSplit) iis;
inputPath = fs.getPath();
}
}
现在将文件名添加到地图输出键。因此,地图输出键可以是以下选项之一:
-具有2个字段的复杂可写-映射器中的文件名和单词
或者只是一个包含两个组件的串联键的文本-映射器中的文件名和单词
现在,您需要一个自定义的分区和比较器来将其划分为不同的缩减器,这样每个文件名都将转到不同的缩减器,同一文件中的相同单词将转到相同的缩减器。你可以在网上找到几个例子
这会让你走的 问题是什么?您只需要映射器的输出?我希望每个输入文件都有单独的字数。标准wordcount程序为所有输入文件提供组合输出。