Dask DataFrame to_parquet return 字节而不是写入文件
Dask DataFrame to_parquet return bytes instead of writing to file
是否可以将 dask/pandas DataFrame 写入 parquet 而不是 return 字节字符串?我知道接受文件路径的 to_parquet()
函数是不可能的。也许,你有一些其他的方法来做到这一点。如果不可能做这样的事情,添加这样的功能是否有意义?理想情况下,它应该是这样的:
parquet_bytes = df.to_parquet() # bytes string is returned
谢谢!
已经进行了允许这样的事情的工作,但它目前不像你建议的那样是单行的。
首先,如果您有适合内存的数据,您可以使用 fastparquet 的 write()
方法,并提供一个 open=
参数。这必须是一个以二进制写入模式创建类文件对象的函数,在您的情况下 BytesIO()
就可以了。
要直接使用 dask 进行这项工作,您可以使用 filesystem_spec 项目中的 the MemoryFileSystem。您需要将 class 添加到 Dask 并编写如下:
dask.bytes.core._filesystems['memory'] = fsspec.implementations.memory.MemoryFileSystem
df.to_parquet('memory://name.parquet')
完成后,作为 class 属性的 MemoryFileSystem.store
将包含类似于文件名的键和包含数据的 BytesIO 对象的值。
是否可以将 dask/pandas DataFrame 写入 parquet 而不是 return 字节字符串?我知道接受文件路径的 to_parquet()
函数是不可能的。也许,你有一些其他的方法来做到这一点。如果不可能做这样的事情,添加这样的功能是否有意义?理想情况下,它应该是这样的:
parquet_bytes = df.to_parquet() # bytes string is returned
谢谢!
已经进行了允许这样的事情的工作,但它目前不像你建议的那样是单行的。
首先,如果您有适合内存的数据,您可以使用 fastparquet 的 write()
方法,并提供一个 open=
参数。这必须是一个以二进制写入模式创建类文件对象的函数,在您的情况下 BytesIO()
就可以了。
要直接使用 dask 进行这项工作,您可以使用 filesystem_spec 项目中的 the MemoryFileSystem。您需要将 class 添加到 Dask 并编写如下:
dask.bytes.core._filesystems['memory'] = fsspec.implementations.memory.MemoryFileSystem
df.to_parquet('memory://name.parquet')
完成后,作为 class 属性的 MemoryFileSystem.store
将包含类似于文件名的键和包含数据的 BytesIO 对象的值。