我有一个Dask DataFrame构造如下:
import dask.dataframe as dd
df = dd.read_csv('matrix.txt', header=None)
type(df) //dask.dataframe.core.DataFrame
有没有办法将此DataFrame保存为pickle?
例如,
df.to_pickle('matrix.pkl')
答案 0 :(得分:6)
快速检查dask
中可用的方法,这是不可能的。作为另一个答案,它仍然可以做,但我担心由于dask数据帧的最终分布式特性,它可能并不简单。
无论如何,如果我是你,我会通过另一种解决方案,并使用镶木地板作为存储。它为您提供与泡菜基本相同的优点,以及更多。
df.to_parquet('my_file.parquet')
虽然,如果你的计划是使用泡菜作为暂停'稍后恢复计算的方法,保存到实木复合地板并不会有帮助。
我的建议是到目前为止使用镶木地板。请看这个post,其中比较了存储一般pandas数据帧的不同技术。你会发现他们甚至不讨论泡菜(它有一些问题,比如它可能在两个python版本之间不兼容)。这篇文章略显陈旧,现在pandas / dask可以直接使用镶木地板,而无需明确使用pyarrow
。
我猜你对阅读时间很感兴趣。文件大小和读取时间之间总是存在权衡。虽然在文章中显示当您考虑多核心操作时,您可以使用压缩的镶木地板文件(Parquet-snappy列)获得类似的读取性能
因此,我会重复自己。转到parquet
文件,您将自己面向未来。除非你的用例与柱状/面向数据的用例非常不同。
答案 1 :(得分:2)
您可以尝试像对待任何其他物体一样腌制它 - 进口泡菜
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)
此外,请检查this有关酸洗数据帧的安全性以及可能会破坏的情况