我们如何从Kafka生产者代码中的Avro Schema访问数组字段?

问题描述

我具有以下Avro架构:

    `{
      "name": "ABC","type": "record","namespace": "com.schema.avro","fields": [
        {
          "name": "str1","type": "string"
        },{
          "name": "arrData","type":["null",{
            "type": "array","items": {
              "name": "arrData_record","fields": [
                {
                  "name": "var1","type": ["null","string"],"default": null
                },{
                  "name": "var2","int"],"default": null
                }
              ]
            }
          }
          ],"default": null
        }
      ]
    }`

我使用了POM.XML Maven插件生成类。 插件生成了以下2类- i)ABC
ii)arrData_record

我可以使用ABC的str1字段,如下所示:

    ABC abc = ABC.newBuilder()
           .setStr1("random value")
           .build()

类似地,我也可以使用.setArrData()。

我想使用.setvar1()和.setvar2()以类似的方式设置数组字段。

如何使用Array类中的字段并进行类似设置?任何示例代码都会有很大帮助。

谢谢。

解决方法

从Avro模式生成的类可以像这样操作

ABC
    .newBuilder()
    .setArrData(Collections.singletonList(arrData_record
        .newBuilder()
        .setVar1("Var1")
        .setVar2(2)
        .build()))
    .build();
,

即使我接受了Nic的回答并且该回答是正确的,我还是最终使用了下面的代码,因为我想在Var1和Var2-中添加多个值。

使用以下代码填充arrData_record的对象-

arrData_record a1 = arrData_record.newBuilder() .setVar1(“ abc”) .setVar2(1) .build();

arrData_record a2 = arrData_record.newBuilder() .setVar1(“ def”) .setVar2(2) .build();

将其添加到列表arrData-

arrData.add(a1); arrData.add(a2);

最后添加了arrData-

ABC abc = ABC.newBuilder() .setStr1(“随机值”) .setarrData(arrData) .build()