如何使用 GenericRecord 在 Avro 中填充嵌套的嵌套记录

问题描述 投票:0回答:1

假设我有以下模式:

{
 "name" : "Profile",
 "type" : "record",
 "fields" : [
  { "name" : "firstName", "type" : "string" },
  { 
   "name" : "address",
   "type" : {
    "type" : "record",
    "name" : "AddressUSRecord",
    "fields" : [
     { "name" : "address1" , "type" : "string" },
     { "name" : "address2" , "type" : "string" },
     { "name" : "city" , "type" : "string" },
     { "name" : "state" , "type" : "string" },
     { "name" : "zip" , "type" : "int" },
     { "name" : "zip4", "type": "int" }
    ]
   }
  }
 ]
}

我使用

GenericRecord
来表示创建的每个配置文件。要添加
firstName
,可以轻松执行以下操作:

Schema  sch =  Schema.parse(schemaFile);
DataFileWriter<GenericRecord> fw = new DataFileWriter<GenericRecord>(new GenericDatumWriter<GenericRecord>()).create(sch, new File(outFile));
GenericRecord r = new GenericData.Record(sch);
r.put(“firstName”, “John”);
fw.append(r);

但是,例如,我该如何设置

city
呢?如何将密钥表示为
r.put
方法可以理解的字符串?

java avro
1个回答
24
投票

对于上面的架构:

GenericRecord t = new GenericData.Record(sch.getField("address").schema());
t.put("city","beijing");
r.put("address",t);
© www.soinside.com 2019 - 2024. All rights reserved.