我正在使用 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 进行硬编码,这显然不是通用的。怎么做?