1

我正在使用 Java 中的 Hadoop(没有 Pig 或 Hive)编写 TF-IDF 用于学习目的。我将把它分成三轮:字数,每个文档的字数,最后是每个单词的 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轮:
  • 映射器 {docID => [words]} --> {[word, docID] => 1}
  • Reducer {[word, docId] => [1,1,...]} --> {[word, docId] => wordCount}

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

4

1 回答 1

2

你可以使用它

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/

高温高压

于 2013-05-20T13:43:24.620 回答