我需要为以下数据编写一个avro模式。曝光是一个由3个数字组成的数组。
{
"Response": {
"status": "",
"responseDetail": {
"request_id": "Z618978.R",
"exposure": [
[
372,
20000000.0,
31567227140.238808
]
[
373,
480000000.0,
96567227140.238808
]
[
374,
23300000.0,
251567627149.238808
]
],
"product": "ABC",
}
}
}
所以我想出了一个模式如下:
{
"name": "Response",
"type":{
"name": "algoResponseType",
"type": "record",
"fields":
[
{"name": "status", "type": ["null","string"]},
{
"name": "responseDetail",
"type": {
"name": "responseDetailType",
"type": "record",
"fields":
[
{"name": "request_id", "type": "string"},
{
"name": "exposure",
"type": {
"type": "array",
"items":
{
"name": "single_exposure",
"type": {
"type": "array",
"items": "string"
}
}
}
},
{"name": "product", "type": ["null","string"]}
]
}
}
]
}
}
当我试图注册模式时。我犯了以下错误。typeerror:unhable type:'dict'意思是我使用了一个列表作为字典键。
Traceback (most recent call last):
File "sa_publisher_main4test.py", line 28, in <module>
schema_registry_client)
File "/usr/local/lib64/python3.6/site-packages/confluent_kafka/schema_registry/avro.py", line 175, in __init__
parsed_schema = parse_schema(schema_dict)
File "fastavro/_schema.pyx", line 71, in fastavro._schema.parse_schema
File "fastavro/_schema.pyx", line 204, in fastavro._schema._parse_schema
TypeError: unhashable type: 'dict'
有人能帮忙指出是什么导致了这个错误吗?
2条答案
按热度按时间zqdjd7g91#
有几个问题。
首先,在模式的最顶层,您有以下内容:
但这是不对的。顶层应该是一个记录类型,其字段名为
Response
. 所以应该是这样的:第二个问题是,对于数组数组,当前有以下问题:
但它应该是这样的:
在解决这些问题之后,模式将能够被解析,但是您的数据包含一个浮点数组,并且您的模式说它应该是一个字符串数组。因此,要么将模式更改为float,要么将数据转换为字符串。
以下是一个示例脚本,可在解决这些问题后使用:
uqxowvwt2#
您得到的错误是因为架构注册表不接受您的架构。您的顶部元素必须是带有“response”字段的记录。
这个模式应该可以工作,我更改了数组项类型,因为在您的消息中您有float而不是string。
您的消息不正确,因为数组元素之间应该有逗号。
当您使用fastavro时,我建议运行以下代码来检查您的消息是否是一个模式示例。