3

import avroはPythonでavroスキーマをコンパイルするためになどを使用します。時々、私のavroスキーマは次のようになります。

{ name: "Message1" ..... }

{ name: "Message2", "fields": [ { "type": "Message1", "name": "previous_avro_schema" } ] } ...

タイプミスは無視してください。メッセージを伝えたいだけです。要点は、2つのavroスキーマがあるということです。avroスキーマの1つは、フィールドの1つとして2番目のavroスキーマを使用します。avro.schema.parse(....)正しくコンパイルできるように、このようなavroメッセージを呼び出すにはどうすればよいですか?

4

1 に答える 1

0

AvroのPythonサポートはかなり哀れですが、一度に複数のスキーマを含むいくつかのものを機能させることができます。スキーマファイルを1つのファイルにマージする必要があります。依存関係が最初に来るように、それらが正しい順序でマージされていることを確認する必要があります。また、名前を実際のスキーマに置き換える必要があります。これは私が使用するスクリプトです。それらをマージするには:

def resolve(path):
    "fully resolve a schema that includes other schemas"
    data = open(path).read()
    # fill in any while they remain
    while True:
        beg = data.find('`')
        end = data.find('`', beg + 1)
        if beg < 0:
            break
        path = os.path.join(os.path.dirname(path), data[beg+1:end] + '.avsc')
        data = data[:beg] + resolve(path) + data[end+1:]
    return data
于 2012-01-30T23:15:23.187 に答える