一尘不染

从Avro GenericRecord获取键入的值

java

给定GenericRecord,与对象相比,推荐的检索类型化值的方法是什么?我们是否应该强制转换值,如果是这样,从Avro类型到Java类型的映射是什么?例如,Avro
Array == Java Collection ; 和Avro String == Java
Utf8

由于每个GenericRecord都包含其架构,因此我希望找到一种类型安全的方法来检索值。


阅读 300

收藏
2020-12-03

共1个答案

一尘不染

阿夫罗具有八个基本类型和5种复杂类型(不包括 工会
作为其它类型的组合)。下表13种这些阿夫罗类型映射到它们的输入接口(在Java类型可以是putGenericRecord)和它们的输出实现(其通过返回的具体Java类型get从一个GenericRecord)。该值适用于Avro
1.7.7。

╔═══════════╦════════════════════════╦═══════════════════════════╗ ║ Avro Type ║ Input Interface ║ Output Implementation ║ ╠═══════════╬════════════════════════╬═══════════════════════════╣ ║ null ║ ║ null ║ ║ boolean ║ java.lang.Boolean ║ java.lang.Boolean ║ ║ int ║ java.lang.Integer ║ java.lang.Integer ║ ║ long ║ java.lang.Long ║ java.lang.Long ║ ║ float ║ java.lang.Float ║ java.lang.Float ║ ║ double ║ java.lang.Double ║ java.lang.Double ║ ║ bytes ║ java.nio.ByteBuffer ║ java.nio.HeapByteBuffer ║ ║ string ║ java.lang.CharSequence ║ org.apache.avro.util.Utf8 ║ ║ record ║ *.GenericRecord ║ *.GenericData$Record ║ ║ enum ║ java.lang.CharSequence ║ *.GenericData$EnumSymbol ║ ║ array ║ java.util.Collection ║ *.GenericData$Array ║ ║ map ║ java.util.Map ║ java.util.HashMap ║ ║ fixed ║ *.GenericFixed ║ *.GenericData$Fixed ║ ╚═══════════╩════════════════════════╩═══════════════════════════╝ * == org.apache.avro.generic


在Avro
1.8.0中,enum类型需要一个GenericEnumSymbol。它不再接受CharSequence

2020-12-03