天天看點

Hadoop_Map中擷取目前spilt檔案名

有時候需要在Map類中的map函數中擷取目前split所讀取的檔案名。

在舊版mapred下面實作方法如下:

// 獲得輸入檔案的路徑名

String path=((FileSplit)reporter.getInputSplit()).getPath().toString();

//使用Reporter reporter對象來擷取,在新版mapreduce中,

Reporter reporter被封裝在類MapContext中(StatusReporter reporter),

在map函數中就是Context context,實作方法應該類似,有興趣的朋友可以試試。

-----------分割線----------->

import org.apache.hadoop.mapreduce.InputSplit; 

import org.apache.hadoop.mapreduce.lib.input.FileSplit;

InputSplit inputSplit = context.getInputSplit();

String fileName = ((FileSplit) inputSplit).getPath().toString();

剛剛搜尋了下,新版中實作如下(轉載,未測試,方法應該正确)

以下轉載:

在mapper中擷取目前正在處理的HDFS檔案名/HDFS目錄名

有時候,Hadoop是按行來對資料進行處理的,由于對每一行資料,map()函數會被調用一次,我們有時可以根據檔案名/目錄名來擷取一些資訊,進而把它們輸出,例如,目錄名中包含了日期,則我們可以取出來并輸出到Reducer。在map()函數中,我們可以這樣取檔案名:

1 2

InputSplit inputSplit = context.getInputSplit();

String fileName = ((FileSplit) inputSplit).getName();

假設目前正在處理的HDFS檔案路徑為:/user/hadoop/abc/myFile.txt,則上面的 fileName 取到的是“myFile.txt”這樣的字元串。但如果要擷取其目錄名“abc”,則可以這樣做:

1 2

InputSplit inputSplit = context.getInputSplit();

String dirName = ((FileSplit) inputSplit).getPath().getParent().getName();