如何将字符串转换为float而不更改字节?

时间:2018-05-24 04:10:40

标签: python python-2.7

通过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修复数据问题。

1 个答案:

答案 0 :(得分:1)

您可以将连接器的 decimal.handling.mode 设置为 string (请参阅here),这可以帮助您更轻松地使用值沉没的一面。