我正在使用Apache Avro

我在Java代码中定义了模式json字符串:

String schemaStr = STRING_IN_JSON_FORMAT;

//use Parser to parse above string to Schema object
Schema.Parser parser = new Schema.Parser();
Schema schema = parser.parse(schemaStr);
//How to programmatically get the class from the schema I got at this point?


如何继续我的代码以编程方式从模式中获取类?

最佳答案

Avro在运行时不会生成Java类型。您将不得不手动编写和填充它,使用通用Schema实例,或者使用Avro Tools或Avro Maven插件将模式定义编译为Java类。您可能不想做第一个。

1.使用通用模式表示

如果您只想创建一个包含执行模式的模式数据的记录,则可以使用GenericRecord

GenericRecord datum = new GenericData.Record(schema);
datum.put("field1", fieldValue)`


如果您的模式中未定义field1,则会抛出一个AvroRuntimeException

2.生成Java类

如果您有描述Fish的架构,并且您想
有一个对应的Java com.example.Fish,您需要进行编译
从您的模式。您可以使用Avro Tools或Avro Maven插件执行此操作,请参见thedocumentation。请注意,"namespace" property确定
类的包层次结构。

现在您有了相应的Java类,现在有一个couple of different ways用来填充数据。

09-30 15:22
查看更多