복붙노트

[PYTHON] 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.

내가 뭘 잘못하고 있죠?

해결법

  1. ==============================

    1.웹의 다른 출처에 따르면 두 번째 주소 정의를 다시 작성합니다.

    웹의 다른 출처에 따르면 두 번째 주소 정의를 다시 작성합니다.

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

    2.명명 된 유형으로 유형을 제공 할 때마다 필드를 다음과 같이 지정해야합니다.

    명명 된 유형으로 유형을 제공 할 때마다 필드를 다음과 같이 지정해야합니다.

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

    그러나 명명 된 유형이 공용체 인 경우 추가 유형 필드가 필요하지 않으므로 다음과 같이 사용할 수 있어야합니다.

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

    희망이 더 명확하게!

  3. from https://stackoverflow.com/questions/11764287/how-to-nest-records-in-an-avro-schema by cc-by-sa and MIT license