Dask:pickle dataframe 以备后用是否安全?

Dask: is it safe to pickle a dataframe for later use?

我有一个类似数据库的对象,其中包含许多 dask 数据帧。我想处理数据,保存并在第二天重新加载以继续分析。

因此,我尝试使用 pickle 保存 dask 数据帧(不是计算结果,只是 "plan of computation" 本身)。显然,它有效(至少,如果我在完全相同的机器上解开对象)......但是有一些陷阱吗?

一般来说通常安全。但是有一些注意事项:

  1. 如果您的 dask.dataframe 包含自定义函数,例如 with with df.apply(lambda x: x),则内部函数将不可 pickle。但是它仍然可以用 cloudpickle
  2. 序列化
  3. 如果您的 dask.dataframe 包含对仅在您本地计算机上有效的文件的引用,那么虽然它仍然可以序列化,但在另一台计算机上重新序列化的版本可能不再有用
  4. 如果您的 dask.dataframe 包含 dask.distributed Future 对象,例如您在集群上使用 Executor.persist 时会发生的情况,那么这些对象目前不可序列化。
  5. 我建议使用 >= 0.11.0 的版本。