avro - 使用GenericRecord在Avro中填充嵌套记录的问题

标签 avro

假设我有以下架构:

{
 "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来代表创建的每个配置文件。要添加名字,可以轻松执行以下操作:
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);

但是,例如,我将如何设置城市?如何将 key 表示为r.put方法可以理解的字符串?

谢谢

最佳答案

对于以上架构:

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

关于avro - 使用GenericRecord在Avro中填充嵌套记录的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5480043/

相关文章:

hadoop - 为什么我的 pig 作业中我的 avro 输出文件如此之小而如此之多?

在 MapReduce 中从自己的函数创建 Avro 对象时出现 java.lang.IllegalAccessError

avro - 如何将 avsc 文件转换为 avdl 文件?

java - 如何像使用 avro console producer 一样生成 Kafka avro 记录?

hadoop - 来自 avro.serde.schema 的错误 - "CannotDetermineSchemaSentinel"

java - 如何将 avro (java) 中的通用记录与实际数组一起使用

file - 与其他格式相比, Parquet 格式的优缺点是什么?

java - 序列化 Avro 消息时出错 - Kafka 架构注册表

java - Avro 架构 : List of generic types

java - 使用阅读器架构将 Avro 文件转换为 JSON