2015-10-06 2 views
3

Мне любопытно, что это способ иметь дело с Avro Python так же, как в реализациях Java или C++.Это способ скомпилировать схемы Avro для классов python?

Согласно официальной документации Avro Python, я должен предоставить схему Avro во время выполнения для кодирования/декодирования данных. Но можно ли использовать генератор кода, как это было в Java/C++?

ответ

1

Я не вижу any indication of an existing Avro schema -> Python class code generator в документах (которые явно указывают на генерацию кода для случая Java) для произвольных интерпретаторов Python. Если вы используете Jython, вы можете использовать генератор кода Java для создания класса, к которому вы обращаетесь в своем коде Jython.

В отличие от Java и C++, отсутствие генерации кода не влияет на производительность Python в любом случае (в случае с CPython), поскольку экземпляры классов реализованы в терминах dict s в любом случае (есть исключения из этого правила в некотором смысле , но они в основном меняют использование памяти, а не тот факт, что поиск dict всегда задействован). Это приводит к тому, что генерация кода в значительной степени «хороша, чтобы иметь» синтаксический сахар, а не необходимую функцию для разработки; с некоторыми усилиями, вы всегда можете реализовать конвертер, чем выписывать определение class, а также в Python, чтобы получить аналогичный эффект (так определяются классы collections.namedtuple).

+0

Спасибо за помощь. Но это действительно печально. Мы собираемся внедрить SDK Python для платформы IoT [Kaa] (http://www.kaaproject.org). По дизайну Kaa SDK настраивается несколькими схемами Avro путем генерации соответствующих классов Java/C++. Для C SDK мы использовали собственный генератор Avro для использования простой структуры C вместо [Avro datum] (http://avro.apache.org/docs/current/api/c/index.html#_examples). При использовании такого подхода схемы (а) Avro необходимы только ** на этапе генерации SDK **. После этого разработчик работает ** только ** с предварительно скомпилированными классами, не зная о какой-либо структуре схемы. – Den

+0

Я не понимаю, почему этот подход не мог работать на Python. Текущая реализация python ужасно неэффективна, и генерация кода может значительно ускорить процесс. – Charles

1

pyschema - неплохое начало, но документация оставляет желать лучшего. Вам нужно посмотреть исходный код, чтобы увидеть, как все это работает. Вы можете использовать его, чтобы читать схемы avro и генерировать исходный код python. Он добавляет еще один слой абстракции и, как следствие, замедляет работу.

Смежные вопросы