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

发布于 2024-10-28 17:46:07 字数 1091 浏览 8 评论 0原文

假设我有以下架构:

{
 "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 方法可以理解的字符串?

Suppose I’ve got the following schema:

{
 "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" }
    ]
   }
  }
 ]
}

I’m using a GenericRecord to represent each Profile that gets created. To add a firstName, it’s easy to do the following:

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);

But how would I set the city, for example? How do I represent the key as a string that the r.put method can understand?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

凯凯我们等你回来 2024-11-04 17:46:07

对于上面的架构:

GenericRecord t = new GenericData.Record(sch.getField("address").schema());
t.put("city","beijing");
r.put("address",t);

For the schema above:

GenericRecord t = new GenericData.Record(sch.getField("address").schema());
t.put("city","beijing");
r.put("address",t);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文