2012-07-11 81 views
6

我正在使用mrjob編寫地圖函數。我的輸入將來自HDFS目錄中的文件。這些文件的名稱包含一個小的但是至關重要的信息,這些信息不存在於這些文件中。有沒有一種方法可以學習(在map函數中)給定鍵值對來自哪個輸入文件的名稱?如何在MRjob中獲取輸入文件的名稱

我找的這個Java代碼等價物:提前

FileSplit fileSplit = (FileSplit)reporter.getInputSplit(); 
String fileName = fileSplit.getPath().getName(); 

謝謝!

回答

6

map.input.file屬性會給出輸入文件名。

按照Hadoop - The Definitive Guide

性質可以從作業的配置來訪問,通過提供用於映射或減速,其中,所述配置是通過配置()方法的實現舊的MapReduce API中得到作爲論點。在新API中,可以從傳遞給Mapper或Reducer的所有方法的上下文對象訪問這些屬性。

+1

和更多信息可以從普利文的前面的回答中找到類似於這樣的問題 - http://stackoverflow.com/問題/ 7449756/get-input-file-name-in-streaming-hadoop-program – 2012-07-11 18:11:58

+4

謝謝,@PraveenSripati和@ChrisWhite,這正是我需要的!明確地爲未來的訪問者聲明:'fileName = os.environ ['map_input_file']'是否有用。 – Bolo 2012-07-11 21:39:12

5

如果您正在使用HADOOP 2.X與Python:

file_name = os.environ['mapreduce_map_input_file'] 
+0

這些在線列出,還是必須瀏覽源代碼才能找到它們? – masu 2014-09-12 01:18:07

+1

這不起作用 – Dinesh 2017-02-23 14:01:33