我正在进行map reduce项目“就像字数计算示例”中的一些更改,在我的情况下,我有许多文件要处理如果我运行该程序,我希望每个map取其中一个文件并将其与其他文件分开处理“我希望一个文件的输出独立于其他文件的输出”
我尝试使用:
Path filesPath = new Path("file1.txt,file2.txt,file3.txt");
MultipleInputs.addInputPath(job, filesPath, TextInputFormat.class, Map.class);
但是我得到的输出是混合所有文件输出在一起,如果一个单词出现在多个文件中,它会处理一次,这是我不想要的。我想把每个文件的字数分开。
我怎么用这个?
如果我把文件放在一个目录里,它会独立处理吗?
2条答案
按热度按时间xghobddn1#
这就是hadoop的map reduce的工作方式。所有文件被合并在一起,按键排序,所有具有相同键的记录都被输入Map器。
如果希望一个Map器只看到一个文件,则必须为每个文件运行一个作业,并且还必须强制配置为每个作业只有一个Map器。
vsmadaxz2#
在Map任务中,您将能够获得正在处理的记录的文件名。
在Map器中获取文件名
一旦有了文件名,就可以将其添加到Map输出键中,形成一个复合键,并实现一个分组比较器,将同一文件中的键分组到一个缩减器中。