使用没有Encode / Decode的子模式(读者模式)的GenericRecord到GenericRecord

时间:2018-02-09 05:09:14

标签: avro

我正在尝试使用子模式(读者模式)从另一个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);

0 个答案:

没有答案
相关问题