Avroファイルを逆シリアル化/読み取りしようとしていますが、avroデータファイルに新しいフィールドがありません。新しいフィールドはスキーマでnullとして宣言されていますが、オプションであることが期待されています。しかし、それでも必須としてエラーが発生します。
スレッド "main" org.apache.avro.AvroTypeExceptionの例外:com.kiran.avro.Userが見つかりました。com.kiran.avro.Userが必要ですが、必須フィールドの場所がありません
AVROスキーマ宣言:
{"name": "loc", "type": ["string", "null"]}
コードを使用してファイルを読み取る:
DatumReader<User> userDatumReader = new SpecificDatumReader<User>(User.class);
DataFileReader<User> dataFileReader = new DataFileReader<User>(file, userDatumReader);
オプションのフィールドを宣言する他の方法はありますか?
ヒント/提案をありがとう!!
「ファイル」の内容は何ですか?
私は間違っているかもしれませんが、スキーマでフィールドをとして定義する場合は{"name": "loc", "type": ["string", "null"]}
、の場合でもloc
フィールドを定義する必要がありますnull
。それは"loc": null
ファイルのようなものでなければなりません。
"default"
このフィールド宣言に追加してみてください:
{"name" : "loc",
"type" : ["null","string"] ,
"default" : null}
次に、ファイル内のこのフィールドを省略できるはずです。
また、この質問を見ることができますAvro:deserialize json-いくつかの追加情報と例については、オプションのフィールドを持つスキーマ。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加