我正在尝试反序列化/读取一个avro文件,avro数据文件没有新字段。即使新字段在schema中声明为null,也应该是可选的。但它仍然给了我一个强制性的错误。
线程“main”org.apache.avro.avrotypeexception中出现异常:找到com.kiran.avro.user,应为com.kiran.avro.user,缺少必需的字段loc
avro架构声明:
{"name": "loc", "type": ["string", "null"]}
正在使用代码读取文件:
DatumReader<User> userDatumReader = new SpecificDatumReader<User>(User.class);
DataFileReader<User> dataFileReader = new DataFileReader<User>(file, userDatumReader);
有没有其他方法来声明可选字段?
感谢您的提示/建议!!
1条答案
按热度按时间ql3eal8s1#
“文件”的内容是什么?
我可能错了,但如果您将schema中的字段定义为
{"name": "loc", "type": ["string", "null"]}
,您仍然需要定义loc
场,即使是null
. 应该是这样的"loc": null
在文件中。尝试添加
"default"
对于此字段声明:那么应该可以在文件中省略这个字段。
您还可以看到这个问题avro:使用可选字段反序列化json-schema以获得一些附加信息和示例。