我正在使用基于MpaReduce
的hadoop 2.6.0
,并且我想跳过数据文件的前六行,因此我使用
if(key.get()<6)
return ;
else
{do ....}
在我的
map() function
中。但这是不对的。我发现
input key
的map()
不是文件行的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/