如何将字符串转换为浮点数而不改变字节?

4

当我的数据通过Kafka发送并存储在S3上时,它的编码出现了问题。

使用Debezium MySQL连接器将其作为十进制数插入到Kafka中,该连接器遵循以下规则:

decimal typing rules

创建的Avro模式的相关部分如下:

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

问题在于,当我从主题中读取数据并写入S3时,它最终以字母串的形式出现在S3中。我的直觉是字节是正确的,但它应该被表示为浮点数,而不是字符串。
示例: - 'JiU8' 应该是 24999.00 - 'JiDw' 应该是 24988.00 - 'RxFc' 应该是 46575.00 - 'LyZQ' 应该是 30900.00
我尝试使用 struct 和 ord,但似乎找不到正确的组合将其转换回浮点形式。
以下是我尝试过的一些方法:
>>> struct.unpack('f','JiU8');
(5.088121542939916e-05,)
>>> struct.unpack('>f','JiU8');
(3822926.0,)

我有一个Apache Spark的工作任务(使用Python 2.7),从S3读取数据并将其移动到OLAP数据库中,因此我希望在将数据插入数据库之前,在Python中解决数据问题。


3
请编辑您的问题并展示使用struct模块的代码——看起来应该可以工作。 - martineau
你考虑过使用 decimal 模块吗?它是一种精确的浮点数替代方案。 - Andrew Allaire
4
这些浮点数变成可打印字符的机会应该很低...因此,字符串可能已经以某种方式进行了编码 - 你有任何想法它们是如何编码的吗? - AChampion
@martineau 我已经添加了一些尝试。 - ElMoselYEE
感谢大家的时间。虽然我不知道数据是如何编码的,但我找到了解决方案。我的流程是Kafka ->(Sink Connector)-> S3 ->(Python中的Apache Spark)-> OLAP数据库。你们的反馈让我把注意力转移到了管道更上游的问题上,在那里我成功地将Java BigDecimal转换为float。现在数据传输完美无缺。 - ElMoselYEE
显示剩余2条评论
1个回答

2
您可以将连接器的 decimal.handling.mode 设置为 string(参见此处),这可能有助于在接收端更轻松地消费这些值。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接