38

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.

私は何が間違っているのですか?

4

2 に答える 2

56

ウェブ上の他の情報源によると、私はあなたの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"}
                        ]
                    }
        }
    ]
}"""
于 2012-08-01T18:10:18.390 に答える
7

タイプを名前付きタイプとして提供するたびに、フィールドは次のように指定する必要があります。

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

ただし、名前付きタイプがユニオンの場合、追加のタイプフィールドは必要なく、次のように使用できます。

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

これがさらに明確になることを願っています!

于 2016-07-30T14:44:31.190 に答える