我在Avro是个新手。当我试图序列化我的数据时,在下面的代码中的"writer.write (datum,encoder);“行得到一个异常。
byte[] byteData = null;
ByteArrayOutputStream out = new ByteArrayOutputStream();
try
{
DatumWriter<GenericRecord> writer = new GenericDatumWriter<GenericRecord>(schema);
Encoder encoder = EncoderFactory.get().binaryEncoder(out, null);
writer.write(datum, encoder);
encoder.flush();
byteData = out.toByteArray();
}
catch (Exception e)
{
// TODO log error
throw new RuntimeException (e.getMessage(), e);
}
finally
{
try
{
out.close();
}
catch (Exception e)
{
throw new RuntimeException (e.getMessage(), e);
}
}
return byteData;我的Avro架构是
{"type":"record",
"name":"MainSchema",
"namespace":"****",
"fields":[{"name":"GenericName","type":"string"},
{"name":"DataCarrier",
"type":{"type":"array",
"items":{
"type":"record",
"name":"SubSchema",
"fields":[{"name":"DataValue",
"type":{"type":"map","values":"string"}}]}}}]}错误消息如下:(在我看来,avro编写器似乎不喜欢GenericRecord数据数组)
java.lang.ClassCastException: [Lorg.apache.avro.generic.GenericRecord; cannot be cast to java.util.Collection有什么想法吗?
发布于 2015-12-03 07:40:51
结果是UTF-8到字符串的转换问题。解决了。
https://stackoverflow.com/questions/32061955
复制相似问题