python - 如何在 avro 序列化期间在 Python 中设置具有十进制值比例和精度的 avro 'bytes' 字段值?
问题描述
我正在尝试使用我拥有的模式向 kafka 生成一条 avro 消息。(使用 confluent-kafka python 包生产者)
生产者工作正常,除了“字节”字段值,它没有在消费者端正确反序列化。这些“字节”字段的值实际上是十进制值,必须设置比例和精度。
我可以在 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
}
斯卡拉实现:
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
}
谢谢
解决方案
推荐阅读
- c# - SLE5528,ACR38U-4A 智能卡读卡器?
- python-3.x - 如果指定 Null 值,如何防止 sqlite3 自动增加主键?
- javascript - 运行配置中缺少 Node.js 应用程序
- .net - 通知具有某些属性更改的对象引用
- html - 如何使用带有“toc”和“隐藏输入”的 nbconvert 导出在 html 中嵌入图像?
- spring - java.lang.IllegalArgumentException:目标对象不能为空
- three.js - 如何使用 Htc Vive pro 正确访问 VR 网站?
- javascript - 枚举 Noesis Javascript.NET 中的所有全局对象
- sql - 很难理解 SQL 查询
- pyspark - 如何将 bigquery 表加载到 dataproc 集群