Как преобразовать строку в плавающее без изменения байтов? - PullRequest
0 голосов
/ 24 мая 2018

Мои данные были неправильно закодированы при отправке через Kafka и сохранены на S3.

Он был вставлен в Kafka в виде десятичного числа с использованием коннектора Debezium MySQL, который соответствует следующим правилам:

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 иОрд, но не могу найти правильную комбинацию, чтобы преобразовать ее обратно в форму с плавающей точкой.

Вот некоторые из моих попыток:

>>> struct.unpack('f','JiU8');
(5.088121542939916e-05,)
>>> struct.unpack('>f','JiU8');
(3822926.0,)

У меня есть задание Apache Spark (Python 2.7) чтение из S3 и перемещение данных в базу данных OLAP, поэтому я надеюсь, что смогу исправить проблему с данными в Python перед вставкой в ​​базу данных.

1 Ответ

0 голосов
/ 28 мая 2018

Вы можете установить decimal.handling.mode на строку (см. здесь ), что может помочь вам упростить использование значений насторона раковины.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...