我很好奇是否有一种与Java或C ++实现相同的方式来处理Avro Python。
根据官方的Avro Python文档,我必须在运行时提供一个Avro模式来对数据进行编码/解码。但是是否有一种使用代码生成器的方法,就像Java / C ++中所做的那样?
更新:我的同事编写了一个非常好的库来完成这个任务,avro-to-python。我们已经在一些相当复杂的模式上使用它进行生产超过一年了。
我必须为php实现类似的东西:avro-to-php
Pyschema 是一个不错的起点,但是文档较差。您需要查看源代码才能了解其工作原理。您可以使用它来读取 Avro 模式并生成 Python 源代码。它添加了另一层抽象,因此会稍微降低速度。
我在文档中没有看到任何关于将Avro模式转换为Python类代码生成器的迹象(文档明确提到了Java情况下的代码生成),适用于任意的Python解释器。如果您正在使用Jython,可以使用Java代码生成器创建一个类,在Jython代码中访问它。
与Java和C++不同,缺少代码生成不会对Python性能产生太大影响(至少在CPython情况下),因为类实例基于字典实现(在某种意义上有例外,但它们主要改变了内存使用,而不是总是涉及字典查找的事实)。这使得代码生成在开发中主要是“好看”的语法糖,而不是必需的功能;通过一些努力,您总是可以实现一个转换器,编写出一个class
定义,并在Python中eval
它以获得类似的效果(这就是如何定义collections.namedtuple
类的方法)。