2

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

苹果
橙子
香蕉

是否可以在我的地图方法中获取 key: 1, Value: Apple , Key: 2, Value: Orange ...?

使用 CDH3/CDH4。更改输入数据以使用 KeyValueInputFormat 不是一种选择。提前谢谢。

4

1 回答 1

4

TextInputFormat 等 InputFormats 的默认行为是给出记录的字节偏移量而不是实际的行号——这主要是由于当输入文件可拆分并被两个或多个处理时无法确定真实的行号映射器。

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

于 2013-03-21T11:00:03.300 回答