【发布时间】:2019-01-17 00:28:55
【问题描述】:
我有一个模式 A 的 GenericRecord 对象,它也是一个生成的 Avro Java 类。我有可能以某种方式将此对象转换为实际的 A 类型吗?
【问题讨论】:
我有一个模式 A 的 GenericRecord 对象,它也是一个生成的 Avro Java 类。我有可能以某种方式将此对象转换为实际的 A 类型吗?
【问题讨论】:
您可以使用 deepCopy 将 Avro GenericRecord 转换为 SpecificRecord。例如,如果“Foo”是特定记录:
Foo foo = (Foo) SpecificData.get().deepCopy(genericRecord.getSchema(), genericRecord)
这假定与传递的架构对应的 SpecificRecord 类可用于 Avro。
请注意,这种方法不支持模式演变:只有一个模式传递给deepCopy,它用于读取和写入。这意味着字段是根据其位置复制的,因此 SpecificRecord 架构必须与 GenericRecord 架构完全匹配。
【讨论】:
deepCopy 期间返回它。
ReservationStatusReason.schema 作为第一个参数而不是genericRecord.schema 传递。还要检查genericRecord.schema.equals(ReservationStatusReason.schema).