【发布时间】:2014-09-26 22:18:36
【问题描述】:
我编写了一个 Avro 模式,其中一些字段 ** 需要是 ** 类型为 String 但 Avro 生成了这些类型为 CharSequence 的字段。
我无法找到任何方法告诉 Avro 将这些字段设为 String 类型。
我尝试使用
"fields": [
{
"name":"startTime",
"type":"string",
"avro.java.stringImpl":"String"
},
{
"name":"endTime",
"type":"string",
"avro.java.string":"String"
}
]
但是对于这两个字段,Avro 正在生成 CharSequence 类型的字段。
还有其他方法可以使这些字段成为String 类型的字段吗?
【问题讨论】:
-
String类实现CharSequence接口。 -
CharSequence 是一个接口。默认情况下,Avro 使用自己的 Utf8 类作为 CharSequence 实现。 Utf8 不超过一个字节缓冲区,可以使用
toString转换为字符串。当您不关心基准测试中的字符串时,Utf8 很方便......但大多数情况下您要使用 CharSequence 并且必须将其转换为字符串。这很麻烦,而且会占用 100% 的内存开销,因为字符串现在既存储为 Utf8 又存储为字符串。这就是为什么很多人想要 String 而不是 CharSequence。将两者混合起来也很有用。
标签: java apache serialization avro