有没有人使用GenericData.Record过Avro和嵌套的地图记录.给出以下架构,我正在努力填充GenericData.Record地图:
{"name": "log_data", "type":
[ "null",
{ "type": "map", "values":
{ "type": "record",
"name": "TypeValuePair",
"fields": [
{"name": "type", "type": "string"},
{"name": "value", "type": ["null", "string"]}
]
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
java代码:
Schema mapSchema = schema.getField("log_data").schema().getTypes().get(1);
//The code below fails
GenericRecord typeValuePair =
new GenericData.Record(mapSchema.getField("TypeValuePair").schema());
Run Code Online (Sandbox Code Playgroud)
有:
org.apache.avro.AvroRuntimeException: Not a record..
Run Code Online (Sandbox Code Playgroud)
知道我应该如何在avro架构中构建一个包含类型记录值的地图?
我能够使用以下代码来实现此目的:
Schema mapSchema = schema.getField("log_data").schema().getTypes().get(1);
GenericRecord typeValuePair =
new GenericData.Record(mapSchema.getValueType());
ImmutableMap.Builder<String, GenericRecord> logDataBuilder =
ImmutableMap.<String, GenericRecord>builder();
typeValuePair.put("type","string");
typeValuePair.put("value", "field1 value");
logDataBuilder.put("field1", typeValuePair);
//Set the log_data map field in the schema
GenericRecordBuilder grb = new GenericRecordBuilder(schema);
grb.set("log_data", logDataBuilder.build());
grb.build();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5711 次 |
| 最近记录: |