我尝试使用以下类型创建Avro架构BigDecimal:
SchemaBuilder.FieldAssembler<Schema> schemaFieldAssembler = SchemaBuilder.record("AvroEventRequest2")
.namespace("com.test")
.fields();
for (Map.Entry<String, Object> entry : inputData.entrySet()) {
if (entry.getValue() instanceof String) {
//some operations
} else if (entry.getValue() instanceof BigDecimal) {
Schema decimalSchema = LogicalTypes.decimal(4)
.addToSchema(Schema.create(Schema.Type.BYTES));
schemaFieldAssembler = schemaFieldAssembler.name(entry.getKey())
.type(decimalSchema).noDefault();
}
}
Run Code Online (Sandbox Code Playgroud)
我读了这个文档: https: //avro.apache.org/docs/1.8.1/spec.html#Decimal,但它对我不起作用。我得到异常:
Caused by: org.apache.kafka.common.errors.SerializationException: Error serializing Avro message
Caused by: java.lang.ClassCastException: java.math.BigDecimal cannot be cast to java.nio.ByteBuffer
at org.apache.avro.generic.GenericDatumWriter.writeBytes(GenericDatumWriter.java:260) ~[avro-1.8.1.jar:1.8.1]
at org.apache.avro.generic.GenericDatumWriter.writeWithoutConversion(GenericDatumWriter.java:116) ~[avro-1.8.1.jar:1.8.1]
at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:70) ~[avro-1.8.1.jar:1.8.1]
Run Code Online (Sandbox Code Playgroud)
如何序列化 BigDecimal 类型?
| 归档时间: |
|
| 查看次数: |
3838 次 |
| 最近记录: |