【问题标题】:Difference between Text and String in HadoopHadoop中文本和字符串的区别
【发布时间】:2013-11-08 04:35:00
【问题描述】:

Hadoop框架中org.apache.hadoop.io.Textjava.lang.String有什么区别?

为什么他们不能使用String 而不是引入一个新的Text 类?

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

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

【问题讨论】:

  • Text 类的主要用途是它提供了序列化和反序列化接口,当您通过网络发送数据而字符串功能有限时提供帮助。简而言之,它是具有额外功能的字符串。
  • 看看这里,有关于差异的例子。 javaonfingertips.blogspot.in/2016/01/…

标签: string text hadoop


【解决方案1】:

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 字符代码单元(因为它是字符串)。

例如,charAt() 返回一个表示 Unicode 代码点的 int,与 返回字符的字符串变体。

迭代: 使用 byte 对 Text 中的 Unicode 字符进行迭代很复杂 索引的偏移量,因为您不能只增加索引。

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

求助于字符串:

文本没有像操作字符串那样丰富的 API java.lang.String,所以很多情况下,需要将Text对象转换为String。 这以通常的方式完成,使用toString() 方法:

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

【讨论】:

  • 那么如何将java.lang.String转换成Text呢?
  • 找到了,val t = new Text(s)。顺便说一句,我在 Scala 中
猜你喜欢
  • 2011-03-22
  • 2015-05-30
  • 2016-07-14
  • 2012-08-09
  • 1970-01-01
  • 2020-11-23
相关资源
最近更新 更多