假设您有一个简化的AVDL示例:
@namespace("example.avro")
protocol User {
record Man {
int age;
}
record Woman {
int age;
}
record User {
union {
Man,
Woman
} user_info;
}
}
在python中,不能正确序列化声明类型的对象,因为不允许使用以下语法:
^{pr2}$唯一被序列化的对象是
{"user_info": {"age": 18}}
丢失所有类型信息和DatumWriter
选择通常与字段集匹配的第一条记录,在本例中是Man
。在
在使用javaapi时,上述问题可以很好地解决。在
那么,我做错什么了?在Python的Avro实现中,序列化和反序列化是否可能不是幂等的?在
您是正确的,标准avro库没有办法指定在这种情况下使用哪个模式。但是,^{} (另一种实现)确实有办法做到这一点。在该实现中,可以将记录指定为元组,其中第一个值是模式名,第二个值是实际的记录数据。记录如下:
{"user_info": ("Woman", {"age": 18})}
以下是示例脚本:
相关问题 更多 >
编程相关推荐