gpt4 book ai didi

python - 使用python(fastavro)解析多个相互引用的AVRO(avsc文件)

转载 作者:行者123 更新时间:2023-12-04 09:06:09 24 4
gpt4 key购买 nike

我有一个 AVRO 模式,它目前位于单个 avsc 文件中,如下所示。现在我想将地址记录移动到另一个常见的 avsc 文件中,该文件应该从许多其他 avsc 文件中引用。所以客户和地址将是单独的 avsc 文件。如何将它们分开并让客户 avsc 文件引用地址 avsc 文件。另外如何使用python处理这两个文件。我目前在 python3 中使用快速 avro 来处理单个 avsc 文件,但打开以使用 python3 或 pyspark 中的任何其他实用程序。
文件名 - customer_details.avsc

[
{
"type": "record",
"namespace": "com.company.model",
"name": "AddressRecord",
"fields": [
{
"name": "streetaddress",
"type": "string"
},
{
"name": "city",
"type": "string"
},
{
"name": "state",
"type": "string"
},
{
"name": "zip",
"type": "string"
}
]
},
{
"namespace": "com.company.model",
"type": "record",
"name": "Customer",
"fields": [
{
"name": "firstname",
"type": "string"
},
{
"name": "lastname",
"type": "string"
},
{
"name": "email",
"type": "string"
},
{
"name": "phone",
"type": "string"
},
{
"name": "address",
"type": {
"type": "array",
"items": "com.company.model.AddressRecord"
}
}
]
}
]
import fastavro

s1 = fastavro.schema.load_schema('customer_details.avsc')
如何将架构拆分到不同的文件中,地址记录文件可以从其他 avsc 文件中引用。那么我将如何使用快速 Avro (Python) 或任何其他 python 实用程序处理多个 avsc 文件?

最佳答案

为此,AddressRecord 的模式应该在一个名为 com.company.model.AddressRecord.avsc 的文件中内容如下:

{
"type": "record",
"namespace": "com.company.model",
"name": "AddressRecord",
"fields": [
{
"name": "streetaddress",
"type": "string"
},
{
"name": "city",
"type": "string"
},
{
"name": "state",
"type": "string"
},
{
"name": "zip",
"type": "string"
}
]
}
Customer schema 不一定需要特殊的命名约定,因为它是顶级架构,但遵循相同的约定可能是个好主意。所以它会在一个名为 com.company.model.Customer.avsc 的文件中内容如下:
{
"namespace": "com.company.model",
"type": "record",
"name": "Customer",
"fields": [
{
"name": "firstname",
"type": "string"
},
{
"name": "lastname",
"type": "string"
},
{
"name": "email",
"type": "string"
},
{
"name": "phone",
"type": "string"
},
{
"name": "address",
"type": {
"type": "array",
"items": "com.company.model.AddressRecord"
}
}
]
}
这些文件必须位于同一目录中。
那你应该可以做 fastavro.schema.load_schema('com.company.model.Customer.avsc')

关于python - 使用python(fastavro)解析多个相互引用的AVRO(avsc文件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63443131/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com