繁体   English   中英

将 Dask 数据帧存储为泡菜

[英]Store a Dask DataFrame as a pickle

我有一个 Dask DataFrame 构造如下:

import dask.dataframe as dd

df = dd.read_csv('matrix.txt', header=None)
type(df) //dask.dataframe.core.DataFrame

有没有办法将此 DataFrame 保存为泡菜?

例如,

df.to_pickle('matrix.pkl')

从快速检查dask中可用的方法dask ,这是不可能的。 仍然可以按照另一个答案来做,但我担心由于 dask 数据帧的最终分布式特性,它可能并不简单。

无论如何,如果我是你,我会采用另一种解决方案并使用镶木地板作为存储空间。 它为您提供了泡菜的基本相同的优点,等等。

df.to_parquet('my_file.parquet')

虽然,如果您的计划是使用 pickle 作为稍后恢复计算的“暂停”方法,则保存到 parquet 并没有真正的帮助。

我的建议是到目前为止使用镶木地板。 看看这篇文章,其中比较了存储通用 Pandas 数据帧的不同技术。 你会看到他们甚至不讨论泡菜(它有一些问题,比如它可能在两个 python 版本之间不兼容)。 文章有点老了,现在pandas/dask可以直接使用parquet,不需要显式使用pyarrow

我猜你对阅读时间很感兴趣。 在文件大小和读取时间之间总是需要权衡。 虽然在文章中表明,当您考虑多核操作时,您可以获得与压缩 parquet 文件相似的读取性能(Parquet-snappy 列)

在此处输入图片说明

因此,我将重复自己。 选择parquet文件,您将面向未来。 除非您的用例与面向柱状/数据框的用例非常不同。

您可以像处理任何其他对象一样尝试对其进行酸洗 - 导入泡菜

with open('filename.pickle', 'wb') as handle:
    pickle.dump(df, handle, protocol=pickle.HIGHEST_PROTOCOL)

with open('filename.pickle', 'rb') as handle:
    b = pickle.load(handle)
print(a == b)

此外,请检查对酸洗DASK dataframes的安全和在什么情况下,在有可能打破

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM