una tuplas recorrer por metodos listas lista elementos diccionarios comprensión como anidadas agregar python avro

python - tuplas - ¿Cómo anidar registros en un esquema de avro?



listas por comprensión python (2)

Estoy intentando que Python analice esquemas de Avro como los siguientes ...

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)

... y me sale la siguiente excepción:

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

¿Qué estoy haciendo mal?


Cada vez que proporcionamos el tipo como tipo nombrado, el campo debe darse como:

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

Sin embargo, si el tipo nombrado es union, entonces no necesitamos un campo de tipo extra y deberíamos poder utilizarlo como:

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

Espero que esto aclara aún más!


De acuerdo con otras fuentes en la web, reescribiría la segunda definición de dirección:

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"} ] }, } ] }"""