2017-06-02 102 views
0

我使用MpaReduce基於hadoop 2.6.0,我想跳過前六行我的數據文件的,所以我用默認情況下,MapReduce的輸入鍵是什麼?

if(key.get()<6) 
    return ; 
else 
    {do ....} 
map() function

但它是不正確的。我發現map()input key不是文件行的offset。關鍵是每一行的長度的總和。爲什麼?它看起來不像許多書中的單詞。

回答

1

If you look at the code,它是文件的實際字節偏移量而不是行。

如果你想跳過文件的第n行,你可能有寫自己的輸入格式/記錄的讀者,或者確保你保持一個行計數器的映射邏輯ALA:

int lines = 0; 
public void map(LongWritable key, Text value, ...) { 
    if(++lines < 6) { return; } 

} 

如果你分割文本文件(因此有> 1的映射器),這顯然不起作用。所以編寫一個專用的InputFormat是解決這個問題最簡單的方法。

另一個竅門是測量該特定文件中前n行的字節數,然後在開始時跳過這些字節數。

+0

謝謝你的回答! – FlashXT

相關問題