2017-06-02 106 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

相关问题