7

これに関するドキュメントには何も見つかりませんでした。デフォルト値に関する一般的な bla のみです。私の仮定は、次のように機能するはずでした。

enum MyEnum {
   UNSPECIFIED,
   SPECIFIED
}

record Test {
   MyEnum e = "UNSPECIFIED";
}

残念ながら、Java の GenericDatumReader は、文字列を見つけているが MyEnum を期待していると不平を言っています。

これが avro IDL を使用してデフォルト値を持つ列挙型を使用する正しい方法であることを誰でも確認できますか? その場合、他の場所にバグがあります。これがそれを行う方法ではないことを確認して、私を修正できますか? どんな入力でも大歓迎です!

更新:これの私の実際のバージョンでは、デフォルト値があるにもかかわらず、レコードに新しく追加された列挙型が問題を引き起こしているようです。これは、私のリーダー スキーマが列挙型を想定しているのに対し、レコードには列挙型が含まれていないことを意味します。スキーマの進化はこれを解決できるはずですが、失敗しているようです。詳細: ここでは直接の Java ではなく、Pig を使用しています。

4

2 に答える 2

7

これは、avro IDL で列挙型のデフォルト値を指定する正しい方法であることがわかりました。私の場合、ユニオン {null, string} が列挙型に置き換えられていたため、すべての問題が発生していました。覚えておいてください: avro のフィールドの型を変更しないでください!

于 2013-07-26T07:58:01.940 に答える
0

私は avro IDL を知りませんが、'record' 構文が確かな場合は、このコードを使用して文字列を列挙型に変換できます。

MyEnum e = Enum.valueOf(MyEnum.class, "UNSPECIFIED")
于 2013-07-25T10:06:19.993 に答える