MapReduce默认的Input键是什么?
What's the Input key of MapReduce by default?
我正在使用基于hadoop 2.6.0
的MpaReduce
,我想跳过数据文件的前六行,所以我使用
if(key.get()<6)
return ;
else
{do ....}
在我的 map() function
.
但这是不对的。我发现 map()
的 input key
不是文件行的 offset
。关键是每行长度的总和。为什么?跟很多书上的字都不一样
If you look at the code,是文件的实际字节偏移量,不是行。
如果您想跳过文件的前 n 行,您可能必须编写自己的输入格式/记录 reader,或者确保在映射器逻辑 ala 中保留一个行计数器:
int lines = 0;
public void map(LongWritable key, Text value, ...) {
if(++lines < 6) { return; }
}
如果您拆分文本文件(因此有 > 1 个映射器),这显然不起作用。所以写一个专用的InputFormat
是解决这个问题最干净的方法。
另一个技巧是测量该特定文件中前 n 行的字节数,然后在开头跳过这个字节数。
我正在使用基于hadoop 2.6.0
的MpaReduce
,我想跳过数据文件的前六行,所以我使用
if(key.get()<6)
return ;
else
{do ....}
在我的 map() function
.
但这是不对的。我发现 map()
的 input key
不是文件行的 offset
。关键是每行长度的总和。为什么?跟很多书上的字都不一样
If you look at the code,是文件的实际字节偏移量,不是行。
如果您想跳过文件的前 n 行,您可能必须编写自己的输入格式/记录 reader,或者确保在映射器逻辑 ala 中保留一个行计数器:
int lines = 0;
public void map(LongWritable key, Text value, ...) {
if(++lines < 6) { return; }
}
如果您拆分文本文件(因此有 > 1 个映射器),这显然不起作用。所以写一个专用的InputFormat
是解决这个问题最干净的方法。
另一个技巧是测量该特定文件中前 n 行的字节数,然后在开头跳过这个字节数。