此工作由 Anaconda Inc. 和 Moore Foundation 的数据驱动发现倡议提供支持。
我很高兴宣布 Dask 0.17.2 版本发布。这是一个包含新特性和稳定性改进的次要版本。本篇博文概述了自2月12日发布 0.17.0 版本以来值得注意的变化。
您可以通过 conda 安装 Dask
conda install dask
或者从 PyPI 通过 pip 安装
pip install dask[complete] --upgrade
完整的更新日志在此处提供
以下是一些值得注意的变化
Tornado 是一个 Dask 严重依赖的并发网络编程流行框架。Tornado 最近发布了一个主要版本更新,其中包含了对 Dask 的一些重要特性以及几个 bug。
新的 IOStream.read_into 方法允许 Dask 通信(或使用此 API 的任何人)更高效地通过网络传输大型数据集,减少复制次数。这使得 Dask 能够利用现代超级计算机上的高性能网络。在 Cheyenne 系统上,我们对此进行了测试,通过此更改(使用少量 worker 进程),我们能够达到 Infiniband 网络提供的全部 3GB/s 带宽。
非常感谢 Antoine Pitrou 和 BenDarnell 在这方面所做的努力。
同时,更新到 Tornado 5.0 也出现了一些意料之外的问题。更广泛地使用 bytearrays 而非 bytes 导致了 Snappy 和 Python 2 等压缩库出现问题,因为它们不期望这些类型。在 distributed.__version__ == 1.21.3 版本中有一个短暂的时间窗口,如果存在 Tornado 5.0,此功能会被启用,但如果 Snappy 也存在,则会表现异常。
Dask 利用一个 类似文件系统的协议来访问远程数据。这就是为什么以下命令能够工作的原因:
import dask.dataframe as dd
df = dd.read_parquet('s3://...')
df = dd.read_parquet('hdfs://...')
df = dd.read_parquet('gcs://...')
现在我们添加了 http 和 https 文件系统,用于直接从 Web 服务器读取数据。如果 Web 服务器支持范围查询,这些文件系统也支持随机访问。
df = dd.read_parquet('https://...')
与 S3、HDFS、GCS 等类似,您也可以在 Dask 开发之外使用这些工具。这里我们读取 Pandas 许可证的前二十个字节:
from dask.bytes.http import HTTPFileSystem
http = HTTPFileSystem()
with http.open('https://raw.githubusercontent.com/pandas-dev/pandas/master/LICENSE') as f
print(f.read(20))
b'BSD 3-Clause License'
感谢 Martin Durant 完成了这项工作并通常管理 Dask 的字节处理。更多信息请参阅远程数据文档。
我们发现并解决了一个 dask.dataframe 的 shuffle 中的正确性 bug,该 bug 导致在连接和具有许多分区的 groupby-apply 等复杂操作期间丢失一些行。
更多信息请参阅 dask/dask #3201。
有许多 Python 子项目可以帮助您在不同的集群资源管理器(如 Yarn、SGE、Kubernetes、PBS 等)上部署 Dask。这些项目现在已经趋于一致,拥有大致相同的 API,我们已将其合并到 distributed.deploy.Cluster 中一个一致的接口中,以便下游项目可以继承。
现在我们拥有了一致的接口,我们已经开始投入更多精力来作为一个整体改进这些系统的接口和智能性。这包括像以下这样令人愉悦的 IPython 小部件:
以及改进的自适应部署逻辑。自适应部署允许集群根据当前工作负载自动伸缩。如果您最近提交了大量工作,调度程序将估算其持续时间并请求适当数量的 worker 以快速完成计算。计算完成后,调度程序将释放 worker 返回系统以释放资源。
此处的逻辑已得到显著改进,包括以下方面:
一些相关项目的新闻
以下人员自2月12日 0.17.0 版本发布以来为 dask/dask 仓库做出了贡献
以下人员自2月12日 1.21.0 版本发布以来为 dask/distributed 仓库做出了贡献