我正在尝试使用子模式(读者模式)从另一个GenericRecord创建GenericRecord的有效方法,而不使用编码器/解码器。例如,我有以下架构
String fullSchema = "{\"namespace\": \"example.avro\",\n" +
" \"type\": \"record\",\n" +
" \"name\": \"User\",\n" +
" \"fields\": [\n" +
" {\"name\": \"name\", \"type\": \"string\"},\n" +
" {\"name\": \"favorite_number\", \"type\": [\"int\", \"null\"]},\n" +
" {\"name\": \"favorite_number2\", \"type\": [\"int\", \"null\"]},\n" +
" {\"name\": \"favorite_color\", \"type\": [\"string\", \"null\"]}\n" +
" ]\n" +
"}";
String readerSchema = "{\"namespace\": \"example.avro\",\n" +
" \"type\": \"record\",\n" +
" \"name\": \"User\",\n" +
" \"fields\": [\n" +
" {\"name\": \"name\", \"type\": \"string\"},\n" +
" {\"name\": \"favorite_number2\", \"type\": [\"int\", \"null\"]}\n" +
" ]\n" +
"}";
我想找到一种方法来做这样的事情,没有任何代码和解码器,我知道可以使用读者架构,但由于性能原因,我想避免这个选项,我真正的架构更大和复杂的(嵌套结构和数组)
GenericRecord record = new GenericData.Record(new Schema.Parser().parse(fullSchema));
record.put("name", "Jhon");
record.put("favorite_number", 1);
record.put("favorite_number2", 2);
record.put("favorite_color", "red");
GenericRecord subRecord = copy(record, readerSchema);