2012-06-12 34 views
2

我有一個目錄OUTPUT,其中有來自Map Reduce作業的輸出文件。輸出文件是使用TextOutputFormat編寫的文本文件。Hadoop中的文本閱讀器類

現在我想從輸出文件中讀取鍵值對。我如何使用hadoop中的一些現有類來做到這一點。我可以做的一種方法是如下

FileSystem fs = FileSystem.get(conf); 
FileStatus[] files = fs.globStatus(new Path(OUTPUT + "/part-*")); 
for(FileStatus file:files){ 
    if(file.getLen() > 0){ 
    FSDataInputStream in = fs.open(file.getPath()); 
    BufferedReader bin = new BufferedReader(new InputStreamReader(
     in)); 
    String s = bin.readLine(); 
    while(s!=null){ 
     System.out.println(s); 
     s = bin.readLine(); 
    } 
    in.close(); 
    } 
} 

這種做法會工作,但增加了我的任務很大,因爲我現在需要手動解析鍵值對出每根線的。我正在尋找更方便的東西,直接讓我讀取一些變量中的鍵和值。

+0

下面是hadoop中讀者類的列表 - http://www.buggybread.com/2015/09/apache-hadoop-list-of-reader-classes.html。這可能有幫助。 –

回答

1

您是否被迫在上一份工作中使用TextOutputFormat作爲輸出格式?

如果沒有,則考慮使用SequenceFileOutputFormat,然後您可以使用SequenceFile.Reader以鍵/值對讀迴文件。您也可以仍然「查看」使用hadoop fs -text path/to/output/part-r-00000

編輯文件:您還可以使用KeyValueLineRecordReader類,你只需要在FileSplit傳遞給德構造函數。

+0

我正在使用TextOutputFormat,因爲我需要輸出文件是人類可讀的。我已經考慮了你的建議,謝謝,那將是我最後的選擇。 – Apurv