将 Dask DataFrame 存储为 pickle
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 保存为 pickle?
例如,
df.to_pickle('matrix.pkl')
您可以像处理任何其他对象一样尝试对它进行酸洗 -
进口泡菜
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)
此外,请检查 pickling dask 数据帧的安全性以及在什么情况下可能会损坏
从对 dask
中可用方法的快速检查来看,这是不可能直接实现的。仍然可以像另一个答案那样做,但我担心由于 dask 数据框的最终分布式性质,它可能并不简单。
无论如何,如果我是你,我会通过另一种解决方案并使用 parquet 作为存储。它为您提供了与 pickle 基本相同的优点,甚至更多。
df.to_parquet('my_file.parquet')
尽管如此,如果您计划将 pickle 用作 'suspend' 稍后恢复计算的方法,保存到 parquet 并没有多大帮助。
到目前为止,我的建议是使用镶木地板。查看此 post,其中比较了存储通用 pandas 数据帧的不同技术。您会看到他们甚至不讨论泡菜(它有一些问题,比如它可能在两个 python 版本之间不兼容)。文章略旧,现在pandas/dask可以直接使用parquet而不需要显式使用pyarrow
.
我猜你对阅读时间很感兴趣。文件大小和读取时间之间总是存在权衡。尽管在文章中显示当您考虑多核操作时,您可以获得与压缩镶木地板文件类似的读取性能(Parquet-snappy 列)
因此,我会重复一遍。选择 parquet
文件,您将面向未来。除非您的用例与面向 columnar/dataframe 的用例有很大不同。
我有一个 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')
您可以像处理任何其他对象一样尝试对它进行酸洗 - 进口泡菜
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
中可用方法的快速检查来看,这是不可能直接实现的。仍然可以像另一个答案那样做,但我担心由于 dask 数据框的最终分布式性质,它可能并不简单。
无论如何,如果我是你,我会通过另一种解决方案并使用 parquet 作为存储。它为您提供了与 pickle 基本相同的优点,甚至更多。
df.to_parquet('my_file.parquet')
尽管如此,如果您计划将 pickle 用作 'suspend' 稍后恢复计算的方法,保存到 parquet 并没有多大帮助。
到目前为止,我的建议是使用镶木地板。查看此 post,其中比较了存储通用 pandas 数据帧的不同技术。您会看到他们甚至不讨论泡菜(它有一些问题,比如它可能在两个 python 版本之间不兼容)。文章略旧,现在pandas/dask可以直接使用parquet而不需要显式使用pyarrow
.
我猜你对阅读时间很感兴趣。文件大小和读取时间之间总是存在权衡。尽管在文章中显示当您考虑多核操作时,您可以获得与压缩镶木地板文件类似的读取性能(Parquet-snappy 列)
因此,我会重复一遍。选择 parquet
文件,您将面向未来。除非您的用例与面向 columnar/dataframe 的用例有很大不同。