我正在使用基于MpaReducehadoop 2.6.0,并且我想跳过数据文件的前六行,因此我使用

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

在我的map() function中。

但这是不对的。我发现input keymap()不是文件行的offset。关键是每行长度的总和。为什么?它看起来不像很多书中的单词。

最佳答案

If you look at the code,它是文件的实际字节偏移量,而不是行。

如果要跳过文件的前n行,则可能必须编写自己的输入格式/记录读取器,或者确保在mapper逻辑ala中保留行计数器:

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

 }

如果拆分文本文件(因此具有> 1个映射器),这显然不起作用。因此,编写专用的InputFormat是解决此问题的最干净的方法。

另一个技巧是测量该特定文件中前n行的字节数,然后仅在开始时跳过此字节数。

关于hadoop - 默认情况下,MapReduce的Input键是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44319252/

10-12 18:41