使用FileInputFormat在map方法中获取行号

时间:2013-03-21 09:36:58

标签: hadoop mapreduce cloudera

我想知道是否可以在我的map方法中获取行号? 我的输入文件只是一列值,如

Apple
Orange
Banana

是否可以获得密钥:1,价值:Apple,Key:2,Value:Orange ...在我的地图方法中?

使用CDH3 / CDH4。不能选择更改输入数据以使用KeyValueInputFormat。 谢谢。

1 个答案:

答案 0 :(得分:4)

诸如TextInputFormat之类的InputFormats的默认行为是给出记录的字节偏移而不是实际行号 - 这主要是由于当输入文件可拆分并由处理时无法确定真实的行号两个或更多的地图制作者。

您可以创建自己的InputFormat(基于TextInputFormat和关联的LineRecordReader)来生成行号而不是字节偏移,但是您需要配置输入格式以从{返回false {1}}方法(意味着多个映射器不会处理大型输入文件)。如果您有小文件或大小接近HDFS块大小的文件,那么这应该不是问题。此外,不可拆分的压缩格式(例如GZip .gz)意味着整个文件将由单个映射器处理。