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)>
中。这假设没有使用组合器。
你好,我一直在努力想出一个标准的修改版本 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)>
中。这假设没有使用组合器。