hadoop - 在 hadoop mapreduce 的 TextInputFormat 中什么是字节偏移量?键如何作为字节偏移量,值如何作为行的内容?

标签 hadoop

在浏览 CustomInputFormat 主题时,我了解到我们有一些默认的输入格式,例如 TextInputFormat、KeyValueInputFormat、SequencefileInputFormat 和 NlineInputFormat。

对于 TextInputFormat,从记录中读取行,行的字节偏移量用作键,内容用作值。请问这个Byte Offset是什么以及line的内容如何被认为是值。

最佳答案

TextInputFormat 是默认的 InputFormat 。每条记录都是一行输入。关键,一个 LongWritable ,是文件中行首的字节偏移量。值(value)是 行的内容,不包括任何行终止符(例如,换行符或回车符), 并被打包为一个文本对象。因此,一个包含以下文本的文件:

On the top of the Crumpetty Tree
The Quangle Wangle sat,
But his face you could not see,
On account of his Beaver Hat.

被分成四个记录的一部分。记录解释如下

键值对:

(0, On the top of the Crumpetty Tree)
(33, The Quangle Wangle sat,)
(57, But his face you could not see,)
(89, On account of his Beaver Hat.)

很明显,键不是行号。这在一般情况下是不可能实现的, 因为一个文件被分成字节,而不是行,边界。拆分处理 独立地。行号实际上是一个连续的概念。你必须记数 当你使用它们时的行数,所以知道拆分中的行号是 可能,但不在文件中

但是,文件中每一行的偏移量对于每个拆分都是独立的 其他拆分,因为每个拆分都知道前面拆分的大小,只需添加这个 到拆分内的偏移量以产生全局文件偏移量。偏移量通常是 对于每行都需要唯一标识符的应用程序来说已经足够了。结合 文件名,它在文件系统中是唯一的。当然,如果所有的线路都是固定的 宽度,计算行号只是将偏移量除以宽度的问题。

关于hadoop - 在 hadoop mapreduce 的 TextInputFormat 中什么是字节偏移量?键如何作为字节偏移量,值如何作为行的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32038221/

相关文章:

mongodb - 使用 mongo-hadoop 连接器的 Hadoop 流式传输失败

hadoop - Pig Schema 错误意外字符 ':'

Hadoop Mapper参数含义

hadoop - 洗牌和排序后的 n-Records 到 reducer

java - 无法从 PHP 执行 Hadoop Jar

Hadoop Distcp 将目录中的内容复制到同名目录

java - org.apache.commons.logging.Log无法解析

java - Hadoop Mapreduce - 访问本地文件系统

java - 尼菲 :can't import getFileSystem in customProcessor?

python - 将Pig嵌入Python