Преобразование pandas df в parquet-file-bytes-object - PullRequest
0 голосов
/ 16 января 2019

У меня есть фрейм данных pandas, и я хочу записать его в виде файла паркета в хранилище файлов Azure.

Пока мне не удалось преобразовать фрейм данных непосредственно в байты, которые я затем могу загрузить в Azure. Мой текущий обходной путь - сохранить его в виде файла паркета на локальном диске, а затем прочитать его как объект байтов, который я могу загрузить в Azure.

Может кто-нибудь сказать мне, как я могу преобразовать файл данных pandas непосредственно в байтовый объект "parquet file", не записывая его на диск? Операция ввода-вывода действительно сильно замедляет работу, и это похоже на ужасный код ...

# Transform the data_frame into a parquet file on the local drive    
data_frame.to_parquet('temp_p.parquet', engine='auto', compression='snappy')

# Read the parquet file as bytes.
with open("temp_p.parquet", mode='rb') as f:
     fileContent = f.read()

     # Upload the bytes object to Azure
     service.create_file_from_bytes(share_name, file_path, file_name, fileContent, index=0, count=len(fileContent))

Я ищу реализовать что-то вроде этого, где transform_functionality возвращает объект байтов:

my_bytes = data_frame.transform_functionality()
service.create_file_from_bytes(share_name, file_path, file_name, my_bytes, index=0, count=len(my_bytes))

1 Ответ

0 голосов
/ 16 января 2019

Я нашел решение, я опубликую его здесь на случай, если кому-то понадобится выполнить ту же задачу. После записи его в файл to_parquet в буфер я извлекаю объект байтов из буфера с помощью функции _.getvalue () следующим образом:

    buffer = BytesIO()
    data_frame.to_parquet(buffer, engine='auto', compression='snappy')

    service.create_file_from_bytes(share_name, file_path, file_name, \
                buffer.getvalue(), index=0, count=buffer.getbuffer().nbytes )
...