'Empty list as default value in AVRO array

What I have in my Schema.avdl:

array<string> names = null;

Now instead of null, I want to have the default value as an empty array, so i tried and failed:

array<string> names = []; and array<string> names = {};

Can someone show me how to put an empty list as the default value ?

Thank you.



Solution 1:[1]

I'm not sure if this directly helps you, but in an avro schema declaration (.avsc), you could write the following:

{
     "type": "record",
     "namespace": "my.avro.schemas",
     "name": "Schema",
     "fields": [ {
          "name": "string_arr",
          "type": {
              "type": "array", 
              "items": "string"
          },
          "default": []
     }]
}

Note that the "default" field definition is an empty json array. Using the Builder of the parsed avro Schema class would fill the "string_arr" field with an empty array per default.

Solution 2:[2]

array<string> names = []; works in Avro 1.8.2. This will generate the following field in JSON:

{
  "name": "names",
  "type": {
    "type": "array",
    "items": "string"
  },
  "default": []
}

Solution 3:[3]

Does it work for the array of records? As I have the following schema and it doesn't initialize the array, it gets null

{
  "namespace": "com.turkogluc",
  "type": "record",
  "name": "OverSpeedingAgg",
  "fields": [
    {
      "name": "driverId",
      "type": "long"
    },
    {
      "name": "incidents",
      "type": {
        "type": "array",
        "items": "com.turkogluc.VehicleLocationUpdate"
      },
      "default": []
    }
  ]
}

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Jahir
Solution 2 blachniet
Solution 3 turkogluc