是否可以将通用记录转换为具有相同模式的特定记录?

nin*_*nja 3 java avro

我有一个模式 A 的 GenericRecord 对象,它也是生成的 Avro Java 类。我是否可以以某种方式将该对象转换为实际的 A 类型?

Ram*_*man 5

您可以将 Avro 转换GenericRecordSpecificRecord使用deepCopy. 例如,如果“Foo”是特定记录:

Foo foo = (Foo) SpecificData.get().deepCopy(genericRecord.getSchema(), genericRecord)
Run Code Online (Sandbox Code Playgroud)

这假设SpecificRecord与传递的模式相对应的类可用于 Avro。

请注意,这种方法不支持模式演化:只有一个模式传递给 ,deepCopy并且它用于读取和写入。这意味着字段是根据其位置复制的,因此SpecificRecord架构必须与GenericRecord架构完全匹配。

请参阅http://apache-avro.679487.n3.nabble.com/Direct-conversion-from-Generic-Record-to-Specific-Record-tp4029324p4029339.html