【发布时间】:2013-02-27 08:00:04
【问题描述】:
我有两个问题:
是否可以使用相同的读取器并解析使用两种兼容模式编写的记录,例如
Schema V2与Schema V1相比,只有一个额外的可选字段,我希望读者理解这两者?我认为这里的答案是否定的,但如果是,我该怎么做?-
我尝试使用
Schema V1写入记录并使用Schema V2读取记录,但出现以下错误:org.apache.avro.AvroTypeException: 找到 foo,期待 foo
我使用了 avro-1.7.3 并且:
writer = new GenericDatumWriter<GenericData.Record>(SchemaV1);
reader = new GenericDatumReader<GenericData.Record>(SchemaV2, SchemaV1);
以下是这两种模式的示例(我也尝试过添加命名空间,但没有成功)。
架构 V1:
{
"name": "foo",
"type": "record",
"fields": [{
"name": "products",
"type": {
"type": "array",
"items": {
"name": "product",
"type": "record",
"fields": [{
"name": "a1",
"type": "string"
}, {
"name": "a2",
"type": {"type": "fixed", "name": "a3", "size": 1}
}, {
"name": "a4",
"type": "int"
}, {
"name": "a5",
"type": "int"
}]
}
}
}]
}
架构 V2:
{
"name": "foo",
"type": "record",
"fields": [{
"name": "products",
"type": {
"type": "array",
"items": {
"name": "product",
"type": "record",
"fields": [{
"name": "a1",
"type": "string"
}, {
"name": "a2",
"type": {"type": "fixed", "name": "a3", "size": 1}
}, {
"name": "a4",
"type": "int"
}, {
"name": "a5",
"type": "int"
}]
}
}
},
{
"name": "purchases",
"type": ["null",{
"type": "array",
"items": {
"name": "purchase",
"type": "record",
"fields": [{
"name": "a1",
"type": "int"
}, {
"name": "a2",
"type": "int"
}]
}
}]
}]
}
提前致谢。
【问题讨论】:
标签: avro