获取匹配的文件名并打印到输出文件

我一直在尝试提出标准WordCount v1.0的修改版本 ,其中我从输入目录 (args[0]) 读取所有文件,并将输出打印到输出目录 (args[1 ] )它不仅包含单词和出现次数,还包含匹配发生的文件列表。


因此,例如我有 2 个文本文件:


//1.txt

I love hadoop

and big data


//2.txt

I like programming

hate big data

输出将是:


//Output.txt

I       2   1.txt 2.txt

love    1   1.txt

hadoop  1   1.txt

and     1   1.txt

big     2   1.txt 2.txt

data    2   1.txt 2.txt

like    1   1.txt

programming  1  2.txt

hate    1   2.txt

在这个阶段,我不确定如何提取发生匹配的文件的名称。此外,我不确定如何存储文件名——是使用 Triple 还是需要使用嵌套映射,所以也许是 Map (K1, Map (K2, v))?我不知道在 mapreduce 程序中哪些是可能的,所以任何提示将不胜感激。


潇湘沐
浏览 79回答 1
1回答

aluckdog

通常不鼓励获取文件名。不同的输入格式有不同的方式来做到这一点,其中一些可能根本不提供这样的功能。假设您正在使用 simple&nbsp;TextInputFormat,您可以使用映射器上下文来检索拆分:FileSplit&nbsp;split&nbsp;=&nbsp;(FileSplit)context.getInputSplit(); String&nbsp;filename&nbsp;=&nbsp;split.getPath().getName();为了生成所需的格式,让映射器发出元组<Text(word),Text(filename)>。Reducer 应该将它们收集到Map<String(word), Set<String>(filename)>.&nbsp;这假设没有使用组合器。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java