Dask DataFrame to_parquet возвращает байты вместо записи в файл - PullRequest
0 голосов
/ 05 октября 2018

Можно ли записать dask / pandas DataFrame в паркет, а затем вернуть строку байтов?Я знаю, что это невозможно с функцией to_parquet(), которая принимает путь к файлу.Может быть, у вас есть другие способы сделать это.Если нет возможности сделать что-то подобное, имеет ли смысл добавлять такую ​​функциональность?В идеале это должно быть так:

parquet_bytes = df.to_parquet() # bytes string is returned

Спасибо!

1 Ответ

0 голосов
/ 05 октября 2018

Была предпринята работа, чтобы разрешить такую ​​вещь, но в настоящее время это не однострочная вещь, как вы предлагаете.

Во-первых, если у вас есть данные, которые могут поместиться в памяти, вы можете использовать fastparquet's *Метод 1003 * и укажите аргумент open=.Это должна быть функция, которая создает файловый объект в режиме бинарной записи, в вашем случае BytesIO().

. Чтобы эта работа работала напрямую с dask, вы могли бы использовать MemoryFileSystem из проекта filesystem_spec.Вам нужно будет добавить класс в Dask и написать следующее:

dask.bytes.core._filesystems['memory']  = fsspec.implementations.memory.MemoryFileSystem
df.to_parquet('memory://name.parquet')

Когда закончите, MemoryFileSystem.store, который является атрибутом класса, будет содержать ключи, похожие на имена файлов, и значения, которые являются объектами BytesIO.содержащие данные.

...