Я пытаюсь создать 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();
}
}
Я прочитал этот документ: 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]
Как я могу сериализовать тип BigDecimal?