Hadoop中文本和字符串之间的区别

lok*_*oki 20 string text hadoop

Hadoop框架org.apache.hadoop.io.Text和之间有什么区别java.lang.String

为什么他们不能使用String而不是引入新的Text课程?

我调查了差异,发现它与编码格式有关; 但是我还不明白.

有人可以解释这些差异(例如,如果适用)?

SSa*_*ker 20

Text对象的二进制表示是一个可变长度整数,包含字符串的UTF-8表示中的字节数,后跟UTF-8字节本身.

Text是UTF8类的替代品,由于它不支持编码超过32,767字节的字符串,并且因为它使用了Java修改过的UTF-8,因此不推荐使用它.

此外,Text使用标准的UTF-8,这使得与其他理解UTF-8的工具交互操作变得更加容易.

以下是与String相关的一些简要说明:

索引: 由于强调使用标准的UTF-8,因此Text和Java String类之间存在一些差异.Text类的索引是在编码字节序列中的位置,而不是字符串中的Unicode字符,或Java char代码单元(就像String一样).

例如,charAt()返回表示Unicode代码点的int,与返回char的String变量不同.

迭代: 迭代文本中的Unicode字符会因使用字节偏移进行索引而变得复杂,因为您不能只增加索引.

Mutable: 与String的另一个区别是Text是可变的(就像Hadoop中的所有可写实现一样,除了NullWritable,它是一个单例).您可以通过调用其中一个set()方法来重用Text实例.

求助于字符串:

Text没有像操作字符串那样丰富的API java.lang.String,因此在许多情况下,您需要将Text对象转换为String.这是通过常规方式完成的,使用以下toString()方法:

有关详细信息,请阅读权威指南.