Как установить значение поля 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
}
Спасибо