Java 如何在具有多个输入的映射器中获取文档ID

Java 如何在具有多个输入的映射器中获取文档ID,java,hadoop,mapreduce,tf-idf,Java,Hadoop,Mapreduce,Tf Idf,我正在使用Java中的Hadoop编写一个TF-IDF(没有Pig或Hive)用于学习目的。我将把它分成三个部分:单词数,每个文档的单词数,最后是每个单词的文档数 我相信工作的主链是正确的,但是我有一个问题:在我的第一轮中,如何在映射器中获取文档Id?我有以下多个输入: Path doc1 = new Path(System.getProperty("user.dir") + "/1.dat"); Path doc2 = new Path(System.getProperty("

我正在使用Java中的Hadoop编写一个TF-IDF(没有Pig或Hive)用于学习目的。我将把它分成三个部分:单词数,每个文档的单词数,最后是每个单词的文档数

我相信工作的主链是正确的,但是我有一个问题:在我的第一轮中,如何在映射器中获取文档Id?我有以下多个输入:

    Path doc1 = new Path(System.getProperty("user.dir") + "/1.dat");
    Path doc2 = new Path(System.getProperty("user.dir") + "/2.dat");
    Path doc3 = new Path(System.getProperty("user.dir") + "/3.dat");
    MultipleInputs.addInputPath(job1, doc1, TextInputFormat.class, MapperRoundOne.class);
    MultipleInputs.addInputPath(job1, doc2, TextInputFormat.class, MapperRoundOne.class);
    MultipleInputs.addInputPath(job1, doc3, TextInputFormat.class, MapperRoundOne.class);
  • 第1轮:
  • 映射器{docID=>[words]}-->{[word,docID]=>1}
  • 缩减器{[word,docId]=>[1,1,…]}-->{[word,docId]=>wordCount}
显然,我可以将每个输入设置为不同的映射器,并硬编码docID,这显然不是通用的。如何做到这一点?

您可以使用

name = ((FileSplit)context.getInputSplit()).getPath().toString();
提及

而且


HTH

谢谢!真正对我有用的是这个答案: