将Dask DataFrame存储为pickle

Arj*_*jun 3 python dataframe pandas dask

我有一个Dask DataFrame构造如下:

import dask.dataframe as dd

df = dd.read_csv('matrix.txt', header=None)
type(df) //dask.dataframe.core.DataFrame
Run Code Online (Sandbox Code Playgroud)

有没有办法将这个DataFrame保存为pickle?

例如,

df.to_pickle('matrix.pkl')
Run Code Online (Sandbox Code Playgroud)

Ign*_*sel 6

从快速检查可用的方法dask是不可能的.它仍然可以作为另一个答案,但我担心由于dask数据帧的最终分布式特性,它可能不是直截了当的.

无论如何,如果我是你,我会通过另一个解决方案并使用镶木地板作为存储.它为您提供与泡菜基本相同的优点,以及更多.

df.to_parquet('my_file.parquet')
Run Code Online (Sandbox Code Playgroud)

虽然,如果你的计划是使用pickle作为'暂停'方法以便稍后恢复计算,那么保存到镶木地板并不会有帮助.

我的建议是到目前为止使用镶木地板.请看这篇文章,其中比较了存储一般熊猫数据帧的不同技术.你会发现他们甚至不讨论pickle(它有一些问题,比如它可能在两个python版本之间不兼容).文章稍微陈旧,现在pandas/dask可以直接使用镶木地板而无需明确使用pyarrow.

我猜你有兴趣阅读时间.文件大小和读取时间之间总是存在权衡.虽然在文章中显示当您考虑多核心操作时,您可以使用压缩拼花文件获得类似的读取性能(Parquet-snappy列)

在此输入图像描述

因此,我会重复一遍.去找parquet档案,你自己将来会证明自己.除非你的用例与柱状/面向数据的用例非常不同.


Viv*_*gan 5

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

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)
Run Code Online (Sandbox Code Playgroud)

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