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

Java Mapreduce - getting names of files with matches & printing to output file

你好,我一直在努力想出一个标准的修改版本 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 程序中哪些是可能的,所以任何提示将不胜感激。

通常不鼓励获取文件名。不同的输入格式有不同的方式来做到这一点,其中一些可能根本不提供这样的功能。

假设您正在使用简单的 TextInputFormat,您可以使用映射器上下文来检索拆分:

FileSplit split = (FileSplit)context.getInputSplit();
String filename = split.getPath().getName();

为了生成所需的格式,让映射器发出元组 <Text(word),Text(filename)>。 Reducer 应该将它们收集到 Map<String(word), Set<String>(filename)> 中。这假设没有使用组合器。