python - 如何指定名称以数字开头的python faust.Record字段?
问题描述
我通过扩展 faust.Record 类来描述浮士德模型。我的输入 json 看起来像:
{
"1": "some_string"
"2": "some_string"
}
所以我必须创建类字段,只用数字命名。我知道,它通常在 Python 中受到限制,但是有没有解决方法,比如我的 fieds 名称的别名?
我在 Java 中寻找类似 Jackson 注释的东西:
import faust
class Model(faust.Record, serializer='json'):
@alias(field_name: '1')
first_name: str
@alias(field_name: '2')
last_name: str
解决方案
如果没有适当的数据模型,就没有简单的方法可以神奇地挽救一个主题。
你永远不应该在没有数据模型的情况下写入 kafka 主题。
正如@OneCricketeer 建议的那样,您应该将未定义的主题作为字典摄取。
之后,您可以编写一个使用该主题的代理,将您的模型转换为适当的数据模型并将其写入主题。
class Person(faust.Record):
first_name: str
last_name: str
现在您可以按预期开始使用您的 eg Person 模型了。
undeclared_json_topic = app.topic('name_of_your_input_topic')
person_topic = app.topic('person', value_type=Person)
@app.agent(undeclared_json_topic)
async def migrate_to_person(json_stream: faust.Stream) -> faust.Stream[Person]:
async for json in json_stream:
person = Person(first_name=json['1'], last_name=json['2'])
await person_topic.send(value=person)
yield
推荐阅读
- reactjs - 如何在 React 中使用图像作为按钮?
- c# - 三元条件运算符:'throw' 和 'throw' c# 之间没有隐式转换
- javascript - 在铯地图中旋转地球
- android - Android:LinearLayout 内的 CardView 使应用程序崩溃
- python - 基于彼此设置自变量
- python - 不能pickle在linode上加载对象
- javascript - 带有换行符和 Unicode 字符的 Javascript 发布表单
- c - C - Linux 模块:关键部分内的 wait_event_interruptible
- ssrs-2012 - SSRS 报告 - PDF/Word 导出性能
- c++ - 使用 std::unique_ptr 有什么好处吗?