java—如何在具有多个输入的Map器中获取文档id

ruarlubt  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(378)

为了学习,我在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,这显然不是通用的。怎么做?

sq1bmfud

sq1bmfud1#

你可以用

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公司

相关问题