2015-10-06 54 views
3

我很好奇它是否像在Java或C++實現中一樣處理Avro Python。這是一種將Avro架構編譯爲python類的方法嗎?

根據官方的Avro Python文檔,我必須在運行時提供一個Avro模式來編碼/解碼數據。但它是一種使用代碼生成器的方式,就像它在Java/C++中一樣?

回答

1

對於任意Python解釋器,我沒有看到文檔中的any indication of an existing Avro schema -> Python class code generator(它明確提到Java案例的代碼生成)。如果您使用的是Jython,則可以使用Java代碼生成器創建一個您在Jython代碼中訪問的類。

不像Java和C++,遇事有代碼生成,不影響Python的性能產生很大(在CPython的情況下是這樣),因爲類實例中的dict條款執行反正(也有例外情況在某種意義上,但它們大多會改變內存使用情況,而不是總是涉及dict查找的事實)。這使得代碼生成在很大程度上「很好」具有語法糖,而不是開發的必要特性;通過一些努力,你總是可以實現一個轉換器,而不是在Python中寫出一個class的定義和eval以獲得類似的效果(這是collections.namedtuple類定義的方式)。

+0

感謝您的幫助。但它真的很傷心。我們將爲[Kaa](http://www.kaaproject.org)IoT平臺實施Python SDK。通過設計,Kaa SDK通過生成相應的Java/C++類來由幾個Avro模式配置。對於C SDK,我們已經實現了我們自己的Avro生成器,以使用普通的C結構而不是[Avro datum](http://avro.apache.org/docs/current/api/c/index.html#_examples)。 通過使用這種方法,在生成SDK **的階段只需要** Avro模式。在此之後,開發人員僅使用預編譯的類僅** **而不知道任何模式結構。 – Den

+0

我不明白爲什麼這種方法無法在Python中工作。目前的python實現非常低效,代碼生成可以大大加快速度。 – Charles

1

pyschema是一個不錯的開始,但文檔很差。您需要查看源代碼以瞭解它是如何工作的。您可以使用它來讀取avro模式並生成python源代碼。它增加了另一層抽象,並且因此降低了一點。

相關問題