Java 如何在hadoop中为各自的输入文件生成不同的输出文件

Java 如何在hadoop中为各自的输入文件生成不同的输出文件,java,hadoop,mapreduce,Java,Hadoop,Mapreduce,我使用了来自net的标准wordcount示例,该示例将多个输入文件输出到单个输出文件中,但我只希望将不同的输入文件输出到它们各自的不同输出文件中。提前感谢。您可以通过以下方式处理需求: -在Mapper中获取文件名并不容易,但可以实现。通过mapper中的以下代码: Path inputPath = null; InputSplit inputSplit = reporter.getInputSplit(); String name = inputSplit.g

我使用了来自net的标准wordcount示例,该示例将多个输入文件输出到单个输出文件中,但我只希望将不同的输入文件输出到它们各自的不同输出文件中。提前感谢。

您可以通过以下方式处理需求: -在Mapper中获取文件名并不容易,但可以实现。通过mapper中的以下代码:

        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程序为所有输入文件提供组合输出。