我试图反序列化/读取Avro文件,avro数据文件没有新字段.即使新模式在模式中声明为null,也应该是可选的.但它仍然给我错误的强制性.
线程"main"中的异常org.apache.avro.AvroTypeException:找到com.kiran.avro.User,期望com.kiran.avro.User,缺少必填字段loc
AVRO架构声明:
{"name": "loc", "type": ["string", "null"]}
Run Code Online (Sandbox Code Playgroud)
使用代码读取文件:
DatumReader<User> userDatumReader = new SpecificDatumReader<User>(User.class);
DataFileReader<User> dataFileReader = new DataFileReader<User>(file, userDatumReader);
Run Code Online (Sandbox Code Playgroud)
有没有其他方法来声明可选字段?
感谢提示/建议!!
小智 5
"文件"的内容是什么?
我可能错了,但是如果你在模式中定义一个字段{"name": "loc", "type": ["string", "null"]},你仍然需要定义一个loc字段,即使是null.它应该类似于"loc": null文件中的内容.
尝试添加"default"到此字段声明:
{"name" : "loc",
"type" : ["null","string"] ,
"default" : null}
Run Code Online (Sandbox Code Playgroud)
然后应该可以在文件中省略该字段.
您还可以看到此问题Avro:反序列化json - schema以及可选字段以获取一些其他信息和示例.
| 归档时间: |
|
| 查看次数: |
6052 次 |
| 最近记录: |