java读取avro文件会产生avrotypeexception:缺少必需字段错误(即使新字段在模式中声明为null)

sycxhyv7  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(719)

我正在尝试反序列化/读取一个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);

有没有其他方法来声明可选字段?
感谢您的提示/建议!!

ql3eal8s

ql3eal8s1#

“文件”的内容是什么?
我可能错了,但如果您将schema中的字段定义为 {"name": "loc", "type": ["string", "null"]} ,您仍然需要定义 loc 场,即使是 null . 应该是这样的 "loc": null 在文件中。
尝试添加 "default" 对于此字段声明:

{"name" : "loc",
"type" :  ["null","string"] ,
"default" : null}

那么应该可以在文件中省略这个字段。
您还可以看到这个问题avro:使用可选字段反序列化json-schema以获得一些附加信息和示例。

相关问题