我在用 MpaReduce 基于 hadoop 2.6.0 ,我想跳过数据文件的前六行,所以我使用
MpaReduce
hadoop 2.6.0
if(key.get()<6) return ; else {do ....}
在我的 map() function .但这是不对的。我发现 input key 的 map() 不是 offset 文件行的。关键是每行的长度之和。为什么?它看起来不像很多书中的词。
map() function
input key
map()
offset
gstyhher1#
如果查看代码,它是文件的实际字节偏移量,而不是行偏移量。如果要跳过文件的前n行,可能需要编写自己的输入格式/记录读取器,或者确保在Map器逻辑中保留一个行计数器:
int lines = 0; public void map(LongWritable key, Text value, ...) { if(++lines < 6) { return; } }
如果分割文本文件(因此有>1个Map器),这显然不起作用。所以写一篇 InputFormat 是解决这个问题最干净的方法。另一个技巧是测量前n行在特定文件中的字节数,然后在开始时跳过这个字节数。
InputFormat
1条答案
按热度按时间gstyhher1#
如果查看代码,它是文件的实际字节偏移量,而不是行偏移量。
如果要跳过文件的前n行,可能需要编写自己的输入格式/记录读取器,或者确保在Map器逻辑中保留一个行计数器:
如果分割文本文件(因此有>1个Map器),这显然不起作用。所以写一篇
InputFormat
是解决这个问题最干净的方法。另一个技巧是测量前n行在特定文件中的字节数,然后在开始时跳过这个字节数。