Dask:pickle dataframe 以备后用是否安全?
Dask: is it safe to pickle a dataframe for later use?
我有一个类似数据库的对象,其中包含许多 dask 数据帧。我想处理数据,保存并在第二天重新加载以继续分析。
因此,我尝试使用 pickle 保存 dask 数据帧(不是计算结果,只是 "plan of computation" 本身)。显然,它有效(至少,如果我在完全相同的机器上解开对象)......但是有一些陷阱吗?
一般来说通常安全。但是有一些注意事项:
- 如果您的 dask.dataframe 包含自定义函数,例如 with with
df.apply(lambda x: x)
,则内部函数将不可 pickle。但是它仍然可以用 cloudpickle 序列化
- 如果您的 dask.dataframe 包含对仅在您本地计算机上有效的文件的引用,那么虽然它仍然可以序列化,但在另一台计算机上重新序列化的版本可能不再有用
- 如果您的 dask.dataframe 包含
dask.distributed
Future
对象,例如您在集群上使用 Executor.persist
时会发生的情况,那么这些对象目前不可序列化。
- 我建议使用 >= 0.11.0 的版本。
我有一个类似数据库的对象,其中包含许多 dask 数据帧。我想处理数据,保存并在第二天重新加载以继续分析。
因此,我尝试使用 pickle 保存 dask 数据帧(不是计算结果,只是 "plan of computation" 本身)。显然,它有效(至少,如果我在完全相同的机器上解开对象)......但是有一些陷阱吗?
一般来说通常安全。但是有一些注意事项:
- 如果您的 dask.dataframe 包含自定义函数,例如 with with
df.apply(lambda x: x)
,则内部函数将不可 pickle。但是它仍然可以用 cloudpickle 序列化
- 如果您的 dask.dataframe 包含对仅在您本地计算机上有效的文件的引用,那么虽然它仍然可以序列化,但在另一台计算机上重新序列化的版本可能不再有用
- 如果您的 dask.dataframe 包含
dask.distributed
Future
对象,例如您在集群上使用Executor.persist
时会发生的情况,那么这些对象目前不可序列化。 - 我建议使用 >= 0.11.0 的版本。