我有一組具有特定名稱的輸入文件(比如說10)。我一次對所有文件運行字數統計作業(輸入路徑是文件夾)。我期待與輸入文件具有相同名稱的10個輸出文件。即應該計數File1輸入,並應將其存儲在具有「file1」名稱的單獨輸出文件中。等到所有文件。
回答
有可以採取的實現多路輸出
2層的方法使用MultipleOutputs類 - 指該文件有關multipleclassoutput(https://hadoop.apache.org/docs/r2.6.3/api/org/apache/hadoop/mapreduce/lib/output/MultipleOutputs.html),信息有關如何實施參照本http://appsintheopen.com/posts/44-map-reduce-multiple-outputs
更多信息
另一個選擇是使用LazyOutputFormat,但是,這與多個輸出結合使用,關於其實現的更多信息,請參閱本文(https://ssmolen.wordpress.com/2014/07/09/hadoop-mapreduce-write-output-to-multiple-directories-depending-on-the-reduce-key/)。
我覺得使用LazyOutputFormat和MultipleOuputs類是更好的方法。
設置減少任務的數量等於輸入文件的數量。這也會創建給定數量的輸出文件。
爲每個地圖輸出鍵(單詞)添加文件前綴。例如,當你在名爲「file0.txt」的文件中遇到單詞「cat」時,你可以發出密鑰「0_cat」或「file0_cat」或其他任何對「file0.txt」唯一的鍵。使用上下文來獲取每次文件名。
覆蓋默認的分區程序,確保所有帶有前綴「0_」或「file0_」的映射輸出鍵都將轉到第一個分區,所有帶有前綴「1_」或「file1_」的鍵將轉到第二個等。
在reducer中,從輸出鍵中刪除「x_」或「filex_」前綴,並將其用作輸出文件的名稱(使用MultipleOutputs)。否則,如果您不需要MultipleOutputs,那麼您可以通過檢查分區程序代碼輕鬆地執行outputfiles和輸入文件之間的映射。 (例如,部分00000將是分區0的輸出)
- 1. 在Elastic MapReduce上輸入多個文件
- 2. 的Hadoop MapReduce的多個輸入文件
- 3. 多個輸入文件處理
- 4. Hadoop MapReduce多輸入
- 5. 在MVC中處理多個多文件輸入
- 6. 在Python中處理多個輸入和輸出文件
- 7. 寫入多處理文件
- 8. 在一行中處理具有多個名稱值對的輸入文件
- 9. 多核處理多個文件並寫入共享輸出文件
- 10. 處理許多輸入文件並通過awk分隔許多輸出文件
- 11. 多個文件作爲輸入到Hadoop Dfs和mapreduce
- 12. MapReduce如何從多個輸入文件中讀取?
- 13. Spark多個文件處理
- 14. 使用AWK處理來自多個文件輸入
- 15. 如何使用getopts處理多個輸入文件參數
- 16. 如何在awk中讀取和處理多個輸入文件?
- 17. append formData多個文件和其他輸入 - php處理
- 18. 優雅地處理多個文件輸入機制
- 19. 一次處理多個CSV文件
- 20. 用codeigniter處理多個輸入字段?
- 21. 如何處理多個觸摸輸入
- 22. 在Python中處理多個輸入值
- 23. 處理在reactjs多個輸入值
- 24. 輸入一個批處理文件並將該輸入輸出到另一個批處理文件
- 25. 針對多個URL處理程序的GAE多個WSGI文件
- 26. 使用mapreduce處理文件
- 27. 將多個批處理命令的輸出寫入文本文件的一行
- 28. Hadoop MapReduce處理來自HDFS的不同輸入文件
- 29. Hadoop,MapReduce - 多輸入/輸出路徑
- 30. 在一個文件中處理多個JSON對象
請澄清... –
你有Infile1,Infile2,...,Infile10輸入文件和Outfile1,Outfile2,...,Outfile10作爲輸出文件。完全喜歡這種模式? – abhiieor
準確要求 - 隨機名稱格式的文件 - Y_XVHD_AWIFS_xxxx_20160821_124309,N_XVHG_AWIQS_xxxx_20160821_124339根據文件內容,我將在現有的文件名中附加另一個字符串。我希望文件與輸入文件名相同,或者我可以根據內容更改文件名。如果我改變它,我會追加一個常量字符串到存在的文件名。 –