我一直在嘗試提出標準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
提交
取消