次のようなAvroスキーマを解析するためにPython=を取得しようとしています...
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番目のアドレス定義を書き直します:
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": ...
}]
これがさらに明確になることを願っています!