Проблема с декодированием данных в формате avro в AWS Glue (Python)

#python #encoding #binary #avro #aws-glue

#питон #кодирование #двоичный #авро #aws-клей

Вопрос:

Я пытаюсь преобразовать двоичную запись Avro. В Java это можно сделать с помощью приведенного ниже фрагмента кода. Однако в Python у меня нет доступа к необработанному двоичному файлу, а вместо этого к двоичному файлу, преобразованному в строку.

Следовательно, как я могу в Python преобразовать эту строку в массив байтов, сохраняя двоичный формат avro?

Мы изучили документы Avro Apache, и если мы используем кодировку UTF-8, строковые значения будут преобразованы должным образом. Хотя все остальные типы данных (например, float, double и т.д.) Не десериализуются должным образом.

Java — программа для декодирования данных Avro [РАБОТАЕТ]

 Schema schema = new Schema.Parser().parse(new File("schemas/Dwelling.avsc"));  DatumReaderlt;GenericRecordgt; reader = new SpecificDatumReaderlt;GenericRecordgt;(schema);  Decoder decoder = DecoderFactory.get().binaryDecoder(result.value(), null); GenericRecord payload2 = null; payload2 = reader.read(null, decoder); System.out.println("Message received : "   payload2);  

Скрипт Python для декодирования данных Avro [НЕ РАБОТАЕТ]

 data = "u001E9 ORCHARD GREENu000ETORONTOu000EM4G 2Y2u0004ONu0000u0000u0000u0000u0000u0000u0000u0000u0000"  def decodeAvro(data):  rb = BytesIO(data.encode('utf-8'))    decoder = BinaryDecoder(rb)  try:  msg = json.dumps(datum_reader.read(decoder))  except:  msg = "error"  pass  return msg  

Комментарии:

1. Вы упомянули, что в Java у вас есть фактический двоичный файл, но в Python у вас есть только строка. Как двоичный файл был преобразован в строку? Любая операция, используемая для преобразования исходного двоичного файла в строку, должна быть отменена, чтобы на стороне Python можно было получить те же исходные двоичные данные.