Skip to content
Advertisement

Nested arrays in Avro

I would like to store two-dimensional arrays of numbers in Avro. I have tried the following:

{
    "namespace": "com.company",
    "type": "record",
    "name": "MyName",
    "doc" : "...",
    "fields": [
        {
            "name": "MyArray",
            "type": {
                "type": "array",
                "items": {
                    "type": {"type": "array","items": "int"}
                }
            }
        }
    ]
}

But when I tried to read it with the parser:

import avro.schema

schema = avro.schema.parse(open("my_schema.avsc", "r").read())

I get the following error:

avro.errors.SchemaParseException: Type property "{'type': 'array', 'items': {'type': {'type': 'array', 'items': 'int'}}}" 
not a valid Avro schema: Items schema ({'type': {'type': 'array', 'items': 'int'}}) not 
a valid Avro schema: Undefined type: {'type': 'array', 'items': 'int'} 
(known names: dict_keys(['com.algoint.ecg_frame_file.EcgFrameFile']))

Advertisement

Answer

It looks like you have one too many type keys.

You schema should be this instead:

{
    "namespace": "com.company",
    "type": "record",
    "name": "MyName",
    "doc" : "...",
    "fields": [
        {
            "name": "MyArray",
            "type": {
                "type": "array",
                "items": {"type": "array","items": "int"}
            }
        }
    ]
}
User contributions licensed under: CC BY-SA
2 People found this is helpful
Advertisement