为了学习,我在java中使用hadoop(没有pig或hive)编写了一个tf-idf。我将把它分成三个部分:单词数,每个文档的单词数,最后是每个单词的单词数。
我相信作业的主链是正确的,但是我有一个问题:在我的第一轮中,如何在Map器中获得文档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);
第一轮:
Map器{docid=>[words]}-->{[word,docid]=>1}
减速机{[word,docid]=>[1,1,…]}-->{[word,docid]=>wordcount}
显然,我可以将每个输入设置为不同的Map器,并硬编码docid,这显然不是通用的。怎么做?
1条答案
按热度按时间sq1bmfud1#
你可以用
引用hadoop在另一个文件中搜索一个文件中的单词
还有
http://bigdataspeak.wordpress.com/2013/03/24/hadoop-how-to-get-the-file-path-of-the-input-record-being-read-in-mapper/
hth公司