我有一組具有特定名稱的輸入文件(比如說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. 多個輸入文件處理
- 2. 在Python中處理多個輸入和輸出文件
- 3. 在一行中處理具有多個名稱值對的輸入文件
- 4. 多核處理多個文件並寫入共享輸出文件
- 5. 多個文件作爲輸入到Hadoop Dfs和mapreduce
- 6. Spark多個文件處理
- 7. 使用AWK處理來自多個文件輸入
- 8. 優雅地處理多個文件輸入機制
- 9. append formData多個文件和其他輸入 - php處理
- 10. 處理在reactjs多個輸入值
- 11. 如何處理多個觸摸輸入
- 12. 一次處理多個CSV文件
- 13. Hadoop,MapReduce - 多輸入/輸出路徑
- 14. 在一個文件中處理多個JSON對象
- 15. 多文件處理
- 16. spring批處理 - 將對象數據寫入多個文件
- 17. 多個文件輸入?
- 18. 如何在JavaScript中處理來自HTML多輸入標記的多個文件?
- 19. 文件[]無法處理多個文件
- 20. 處理多個對象,如一個 - WPF
- 21. Hadoop MapReduce - 每個輸入的一個輸出文件
- 22. 多個用戶輸入的多個異常處理
- 23. MongoDB MapReduce比純Java處理慢得多?
- 24. 從一個大文件中分塊處理多處理數據?
- 25. Gulpfile.js處理多個文件夾中的多個文件
- 26. 批處理多個文件夾中的多個文件
- 27. 多文件輸入
- 28. 處理多個字段插入一行
- 29. 同時處理多個文本文件
- 30. 輸入一個文本文件,並在Python中寫入多個輸出文件
請澄清... –
你有Infile1,Infile2,...,Infile10輸入文件和Outfile1,Outfile2,...,Outfile10作爲輸出文件。完全喜歡這種模式? – abhiieor
準確要求 - 隨機名稱格式的文件 - Y_XVHD_AWIFS_xxxx_20160821_124309,N_XVHG_AWIQS_xxxx_20160821_124339根據文件內容,我將在現有的文件名中附加另一個字符串。我希望文件與輸入文件名相同,或者我可以根據內容更改文件名。如果我改變它,我會追加一個常量字符串到存在的文件名。 –