Avro с типом Java BigDecimal - PullRequest
       6

Avro с типом Java BigDecimal

1 голос
/ 23 сентября 2019

Я пытаюсь создать 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?

...