如何在具有MultipleInputs的Mapper中获取文档ID



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

我相信主作业链是正确的,但是我在开始时就有一个问题:在我的第一轮中,我如何获得映射器内的文档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:
  • Mapper {docID =>[词]}->{[词,docID] => 1}
  • Reducer {[word, docId] =>[1,1,…]} -> {[word, docId] => wordCount}

我显然可以将每个输入设置为不同的映射器,并硬编码docID,这显然不是通用的。怎么做呢?

你可以使用

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

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

http://bigdataspeak.wordpress.com/2013/03/24/hadoop-how-to-get-the-file-path-of-the-input-record-being-read-in-mapper/

HTH

相关内容

  • 没有找到相关文章

最新更新