Как сохранить данные из панд в фрейме Azure с помощью Python? - PullRequest
0 голосов
/ 13 февраля 2019

Я хочу сохранить обработанные данные в фрейме данных pandas в лазурные капли в формате файла паркета.Но перед загрузкой в ​​BLOB-файлы я должен сохранить их в виде файла паркета на локальном диске, а затем загрузить.Я хочу написать pyarrow.table в pyarrow.parquet.NativeFile и загрузить его напрямую.Кто-нибудь может мне с этим помочь.Ниже код работает нормально:

import pyarrow as pa
import pyarrow.parquet as pq

battery_pq = pd.read_csv('test.csv')
######## SOme Data Processing
battery_pq = pa.Table.from_pandas(battery_pq)
pq.write_table(battery_pq,'example.parquet')
block_blob_service.create_blob_from_path(container_name,'example.parquet','example.parquet')

Необходимо создать файл в памяти (объект типа файла ввода / вывода), а затем загрузить его в BLOB-объект.

1 Ответ

0 голосов
/ 13 февраля 2019

Для этого вы можете использовать io.BytesIO или, в качестве альтернативы, Apache Arrow также предоставляет собственную реализацию BufferOutputStream.Преимущество этого состоит в том, что это пишет в поток без издержек прохождения Python.Таким образом, создается меньше копий и высвобождается GIL.

import pyarrow as pa
import pyarrow.parquet as pq

df = some pandas.DataFrame
table = pa.Table.from_pandas(df)
buf = pa.BufferOutputStream()
pq.write_table(table, buf)
block_blob_service.create_blob_from_bytes(
    container,
    "example.parquet",
    buf.getvalue().to_pybytes()
)
...