我一直在嘗試提出標(biāo)準(zhǔn)WordCount v1.0的修改版本 ,其中我從輸入目錄 (args[0]) 讀取所有文件,并將輸出打印到輸出目錄 (args[1 ] )它不僅包含單詞和出現(xiàn)次數(shù),還包含匹配發(fā)生的文件列表。因此,例如我有 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在這個階段,我不確定如何提取發(fā)生匹配的文件的名稱。此外,我不確定如何存儲文件名——是使用 Triple 還是需要使用嵌套映射,所以也許是 Map (K1, Map (K2, v))?我不知道在 mapreduce 程序中哪些是可能的,所以任何提示將不勝感激。
1 回答

aluckdog
TA貢獻(xiàn)1847條經(jīng)驗 獲得超7個贊
通常不鼓勵獲取文件名。不同的輸入格式有不同的方式來做到這一點,其中一些可能根本不提供這樣的功能。
假設(shè)您正在使用 simple TextInputFormat
,您可以使用映射器上下文來檢索拆分:
FileSplit split = (FileSplit)context.getInputSplit(); String filename = split.getPath().getName();
為了生成所需的格式,讓映射器發(fā)出元組<Text(word),Text(filename)>
。Reducer 應(yīng)該將它們收集到Map<String(word), Set<String>(filename)>
. 這假設(shè)沒有使用組合器。
添加回答
舉報
0/150
提交
取消