Как установить значение поля avro 'bytes' с десятичной шкалой и точностью в Python во время сериализации avro?

Я пытаюсь создать сообщение avro для kafka со схемой, которая у меня есть. (Использование производителя пакета python confluent-kafka)

Производитель работает нормально, за исключением значения поля «байты», которое не десериализуется должным образом на стороне потребителя. Значением для этих «байтовых» полей будут фактически десятичные значения, которые должны быть установлены с масштабом и точностью.

Я могу сделать это на Scala, ниже приведен код для Scala, то же самое, что я ищу на Python.

Схема (только конкретное поле):

      {
                "name": "Longitude",
                "type": ["null", {
                    "type": "bytes",
                    "scale": 10,
                    "precision": 13,
                    "connect.version": 1,
                    "connect.parameters": {
                        "scale": "10",
                        "connect.decimal.precision": "13"
                    },
                    "connect.name": "org.apache.kafka.connect.data.Decimal",
                    "logicalType": "decimal"
                }],
                "default": null
            }

Реализация Scala:

      def getByteBufferOrNullForByteTyeField(columnVal : AnyRef, precision: Int, scale: Int): ByteBuffer = {
  if(columnVal != null){
    val doubleVal = columnVal.asInstanceOf[Double]
    import java.math.BigDecimal
    import java.nio.ByteBuffer
    val decimalSchema = Decimal.schema(scale)
    val mathContext = new MathContext(precision, RoundingMode.HALF_DOWN)
    val valueBuffer = ByteBuffer.wrap(
      Decimal.fromLogical(
        decimalSchema,
        new BigDecimal(doubleVal, mathContext).setScale(10, RoundingMode.HALF_UP)
      )
    )
    valueBuffer
  }else null
}

Спасибо

0 ответов

Другие вопросы по тегам