1

我正在使用带有一些大中间值的 Dask,并且我从 pickle 中得到错误,如下所示:

error: 'i' format requires -2147483648 <= number <= 2147483647

这是怎么回事?Dask 不支持序列化大于 2GB 的数据块吗?

4

1 回答 1

3

Dask 有时使用 Pickle 和 Cloudpickle 库来序列化数据。在 Python 2 中,Pickle 有 2GB 的限制。这个问题有几个解决方案:

使用更小的块

您可能希望减小块大小以传递每个小于 2GB 的数据位。这也可以帮助您的表现。对于当今的大多数应用程序而言,2GB 块相当大。我个人倾向于拍摄接近 100MB 的块大小。

在 dask.dataframe 中,您通常可以在读取数据时控制块大小,例如使用blocksize=关键字 in dd.read_csv(尽管不同的数据摄取方法会有不同的执行方式)。

或者,您可以重新分区数据。

df = df.repartition(npartitions=1000)

定义自定义序列化程序

Dask 不必使用 Pickle,实际上它通常不需要用于 NumPy 数组等特殊数据类型。有关如何注册自己的序列化函数的信息,请参阅以下文档:

http://distributed.readthedocs.io/en/latest/serialization.html

使用 Python 3

Python 2 已接近生命的尽头。现在可能是考虑开始使用 Python 3 的好时机,因为这样的许多问题都会迎刃而解。大多数社区库现在都支持 Python 3,甚至比支持 Python 2 更好。

当然,切换可能是一个挑战,尤其是对于大型企业代码库,因此上述其他选项可能在短期内就足够了。

于 2017-08-24T14:22:01.970 回答