使用avro

时间:2018-08-21 21:05:13

标签: java serialization schema avro

我有一个JSON格式的对象,如下所示。

[  
   {  
      "id":1,
      "name":"name1",
      "address":"address1"
   }
]

我需要使用avro对其进行序列化。

我的第一个想法是像下面这样定义我的avro模式

{
  "type" : "array",
  "items" : {
    "type" : "record",
    "name" : "MyClass",
    "namespace" : "com.test.avro",
    "fields" : [ {
      "name" : "id",
      "type" : "long"
    }, {
      "name" : "name",
      "type" : "string"
    }, {
      "name" : "address",
      "type" : "string"
    } ]
  }
}

但是我不知道如何使用GenericRecord对其进行序列化,因为我没有根字段密钥。

GenericRecord record = new GenericData.Record(schema);
record.put(key, value); // I don't have this key

我的第二个想法是只为内部类定义avro模式。

{
  "type" : "record",
  "name" : "MyClass",
  "namespace" : "com.test.avro",
  "fields" : [ {
    "name" : "id",
    "type" : "long"
  }, {
    "name" : "name",
    "type" : "string"
  }, {
    "name" : "address",
    "type" : "string"
  } ]
}

然后当我进行序列化时,我会看到类似下面的内容。

List<GenericRecord> response = new ArrayList<>();
for (MyClass entry : list) {
    GenericRecord record = new GenericData.Record(schema);
    record.put("id", entry.getId());
    record.put("name", entry.getName());
    record.put("address", entry.getAddress());
    response.add(record);
}

但是我坚持初始化DatumWriter,因为它将变成List<GenericRecord>,并且我没有初始化的模式。

有人可以帮忙吗?

0 个答案:

没有答案
相关问题