mapreduce的默认输入键是什么?

wfveoks0  于 2021-06-01  发布在  Hadoop
关注(0)|答案(1)|浏览(326)

我在用 MpaReduce 基于 hadoop 2.6.0 ,我想跳过数据文件的前六行,所以我使用

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

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

gstyhher

gstyhher1#

如果查看代码,它是文件的实际字节偏移量,而不是行偏移量。
如果要跳过文件的前n行,可能需要编写自己的输入格式/记录读取器,或者确保在Map器逻辑中保留一个行计数器:

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

 }

如果分割文本文件(因此有>1个Map器),这显然不起作用。所以写一篇 InputFormat 是解决这个问题最干净的方法。
另一个技巧是测量前n行在特定文件中的字节数,然后在开始时跳过这个字节数。

相关问题