默认情况下,MapReduce的输入键是什么?

时间:2017-06-02 00:54:17

标签: hadoop mapreduce

我正在使用基于MpaReduce的{​​{1}},我想跳过数据文件的前六行,所以我使用

hadoop 2.6.0

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

但这不对。我发现map() function的{​​{1}}不是文件行的input key。关键是每条线的长度之和。为什么?它看起来不像许多书中的文字。

1 个答案:

答案 0 :(得分:1)

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

如果你想跳过文件的前n行,你可能需要编写自己的输入格式/记录阅读器,或者确保在mapper logic ala中保留行计数器:

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

 }

如果您拆分文本文件(因此具有&gt; 1映射器),这显然不起作用。因此,编写专用的InputFormat是解决此问题的最简洁方法。

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