我一直在尝试提出标准WordCount v1.0的修改版本 ,其中我从输入目录 (args[0]) 读取所有文件,并将输出打印到输出目录 (args[1 ] )它不仅包含单词和出现次数,还包含匹配发生的文件列表。因此,例如我有 2 个文本文件://1.txtI love hadoopand big data//2.txtI like programminghate big data输出将是://Output.txtI 2 1.txt 2.txtlove 1 1.txthadoop 1 1.txtand 1 1.txtbig 2 1.txt 2.txtdata 2 1.txt 2.txtlike 1 1.txtprogramming 1 2.txthate 1 2.txt在这个阶段,我不确定如何提取发生匹配的文件的名称。此外,我不确定如何存储文件名——是使用 Triple 还是需要使用嵌套映射,所以也许是 Map (K1, Map (K2, v))?我不知道在 mapreduce 程序中哪些是可能的,所以任何提示将不胜感激。
1 回答
aluckdog
TA贡献1847条经验 获得超7个赞
通常不鼓励获取文件名。不同的输入格式有不同的方式来做到这一点,其中一些可能根本不提供这样的功能。
假设您正在使用 simple TextInputFormat
,您可以使用映射器上下文来检索拆分:
FileSplit split = (FileSplit)context.getInputSplit(); String filename = split.getPath().getName();
为了生成所需的格式,让映射器发出元组<Text(word),Text(filename)>
。Reducer 应该将它们收集到Map<String(word), Set<String>(filename)>
. 这假设没有使用组合器。
添加回答
举报
0/150
提交
取消