2013-03-21 35 views
2

我想知道是否可以在我的地圖方法中獲取行號? 我的輸入文件是這樣的值只是一個單一的列,使用FileInputFormat獲取地圖方法中的行號

 
Apple 
Orange 
Banana 

是否有可能獲得關鍵:1,價值:蘋果,重點:2,價值:橘子......在我的地圖的方法?

使用CDH3/CDH4。更改輸入數據以便使用KeyValueInputFormat不是一個選項。 提前致謝。

回答

4

InputFormat如TextInputFormat的默認行爲是給出記錄的字節偏移量而不是實際的行號 - 這主要是由於當輸入文件可拆分和正在處理時無法確定真實行號由兩個或更多映射器。

你可以創建自己的InputFormat(基於TextInputFormat和相關LineRecordReader)生產線數,而不是字節偏移,但你需要配置你的輸入格式從isSplittable方法返回false(這意味着一個大的輸入文件不會被多個映射器處理)。如果你有小文件或HDFS塊大小接近的文件,那麼這應該不成問題。此外,不可拆分的壓縮格式(例如GZip .gz)意味着整個文件將由單個映射器處理。

+0

這是當前實現的功能。具有isSplittable的自定義TextInputFormat/LineRecordReader返回false。雖然文件沒有被壓縮(只是純文本文件),但問題是,輸入文件非常大,大小超過1TB。我正在考慮爲rowid地圖創建一個拆分塊。任何想法? – 2013-03-21 11:38:49