Serialization 如何在Avro模式中表示重复字段?

Serialization 如何在Avro模式中表示重复字段?,serialization,schema,deserialization,nested,avro,Serialization,Schema,Deserialization,Nested,Avro,我的数据模型有几个固定字段和一个可变字段块。变量字段作为一个块,可以在同一记录内重复o到n次 “对象人”可以作为这方面的类比。名称在每个记录中只有一个条目,但他可以有o到n个地址,字段地址也有一个结构。有没有一种方法可以在地址模式中循环查找此人拥有的任意数量的地址?如何在Avro模式文件中提到这一点?您是否尝试过使用嵌套的Avro模式。这将解决您的一人多地址要求。下面是一个有帮助的模式 { "type": "record", "name" : "person", "nam

我的数据模型有几个固定字段和一个可变字段块。变量字段作为一个块,可以在同一记录内重复o到n次


“对象人”可以作为这方面的类比。名称在每个记录中只有一个条目,但他可以有o到n个地址,字段地址也有一个结构。有没有一种方法可以在地址模式中循环查找此人拥有的任意数量的地址?如何在Avro模式文件中提到这一点?

您是否尝试过使用嵌套的Avro模式。这将解决您的一人多地址要求。下面是一个有帮助的模式

{
    "type": "record",
    "name" : "person",
    "namespace" : "com.testavro",
    "fields": [
        { "name" : "personname", "type": ["null","string"] },
        { "name" : "personId", "type": ["null","string"] },
        {  "name" : "Addresses", "type": {
            "type": "array",
            "items": [  {
              "type" : "record",
              "name" : "Address",
              "fields" : [
                { "name" : "addressLine1", "type": ["null", "string"] }, 
                { "name" : "addressLine2", "type": ["null", "string"] }, 
                { "name" : "city", "type": ["null", "string"] }, 
                { "name" : "state", "type": ["null", "string"] }, 
                { "name" : "zipcode", "type": ["null", "string"] }
                ]
            }]
            }
        }
    ]
}
当使用上述avro模式生成代码时,您将获得person类和Address类。person类的自动生成类(仅字段声明)如下所示

 /**
   * RecordBuilder for person instances.
   */
  public static class Builder extends org.apache.avro.specific.SpecificRecordBuilderBase<person>
    implements org.apache.avro.data.RecordBuilder<person> {

    private java.lang.String personname;
    private java.lang.String personId;
    private java.util.List<java.lang.Object> Addresses;
  /**
   * RecordBuilder for Address instances.
   */
  public static class Builder extends org.apache.avro.specific.SpecificRecordBuilderBase<Address>
    implements org.apache.avro.data.RecordBuilder<Address> {

    private java.lang.String addressLine1;
    private java.lang.String addressLine2;
    private java.lang.String city;
    private java.lang.String state;
    private java.lang.String zipcode;
/**
*个人实例的RecordBuilder。
*/
公共静态类生成器扩展了org.apache.avro.specific.SpecificRecordBuilderBase
实现org.apache.avro.data.RecordBuilder{
private java.lang.String personname;
私有java.lang.String personId;
私有java.util.List地址;
Address类(仅字段声明)如下所示

 /**
   * RecordBuilder for person instances.
   */
  public static class Builder extends org.apache.avro.specific.SpecificRecordBuilderBase<person>
    implements org.apache.avro.data.RecordBuilder<person> {

    private java.lang.String personname;
    private java.lang.String personId;
    private java.util.List<java.lang.Object> Addresses;
  /**
   * RecordBuilder for Address instances.
   */
  public static class Builder extends org.apache.avro.specific.SpecificRecordBuilderBase<Address>
    implements org.apache.avro.data.RecordBuilder<Address> {

    private java.lang.String addressLine1;
    private java.lang.String addressLine2;
    private java.lang.String city;
    private java.lang.String state;
    private java.lang.String zipcode;
/**
*地址实例的RecordBuilder。
*/
公共静态类生成器扩展了org.apache.avro.specific.SpecificRecordBuilderBase
实现org.apache.avro.data.RecordBuilder{
私有java.lang.String地址行1;
私有java.lang.String地址行2;
私有java.lang.String城市;
私有java.lang.String状态;
私有java.lang.String zipcode;
这就是你要找的吗