Как вложить записи в схему Avro?

Я пытаюсь заставить Python анализировать схемы Avro, такие как следующие …

from avro import schema mySchema = """ { "name": "person", "type": "record", "fields": [ {"name": "firstname", "type": "string"}, {"name": "lastname", "type": "string"}, { "name": "address", "type": "record", "fields": [ {"name": "streetaddress", "type": "string"}, {"name": "city", "type": "string"} ] } ] }""" parsedSchema = schema.parse(mySchema) 

… и я получаю следующее исключение:

 avro.schema.SchemaParseException: Type property "record" not a valid Avro schema: Could not make an Avro Schema object from record. 

Что я делаю не так?

    2 Solutions collect form web for “Как вложить записи в схему Avro?”

    Согласно другим источникам в Интернете, я бы переписал ваше второе определение адреса:

     mySchema = """ { "name": "person", "type": "record", "fields": [ {"name": "firstname", "type": "string"}, {"name": "lastname", "type": "string"}, { "name": "address", "type": { "type" : "record", "name" : "AddressUSRecord", "fields" : [ {"name": "streetaddress", "type": "string"}, {"name": "city", "type": "string"} ] }, } ] }""" 

    Каждый раз, когда мы указываем тип как именованный тип, поле должно быть указано как:

     "name":"some_name", "type": { "name":"CodeClassName", "type":"record/enum/array" } 

    Однако, если именованный тип является объединением, нам не нужно дополнительное поле типа и оно должно использоваться как:

     "name":"some_name", "type": [{ "name":"CodeClassName1", "type":"record", "fields": ... }, { "name":"CodeClassName2", "type":"record", "fields": ... }] 

    Надеюсь, это еще раз пояснит!

    Python - лучший язык программирования в мире.