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();


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM