目录

更新日志

目录

更新日志

注意

此处并非全部变更。有关完整的变更列表,请参阅 git log。

2025.5.0

重点

其他变更

2025.4.1

重点

此版本包含针对 2025.4.0 版本中引入的几个图优化问题的修复。

详情请参阅 dask#11906dask#11898dask#11903dask#11904 (由 Florian Jetter 提交)。

其他变更

2025.4.0

重点

  • 计算多个由 Dask-Expr 支持的集合(例如 DataFrames)时,它们现在是一起优化,而不是单独优化。

  • 图具现化和低级优化现在在分布式集群的调度器上执行(如果可用)。

  • DataFrame.shuffle 新增关键字参数 force,它指示优化器在优化期间不要丢弃 shuffle 操作。

  • 作为参数传递给 Dask 方法的集合现在可以被正确优化。如果传递多个集合作为参数,它们将一起优化。以这种方式传递的集合禁止被重复使用,即如果集合在另一个函数调用中再次使用,它将再次计算。这种模式用于避免通常导致内存使用增加的流水线中断。避免这些应该能减少集群上的内存压力,但可能导致运行时性能下降。

  • (以上一点的特例) 传递给 Delayed 对象的集合现在会自动优化。

破坏性变更

  • 移除了对自定义低级优化器的支持。

  • 顶级的 dask.optimize 现在将始终触发图具现化。此前并非总是如此。这也导致任何低级 HLG 注解被丢弃。

  • DataFrame 和 Array 的计算结果现在始终在集群上拼接。此前,其行为取决于用于调用 compute 的 API(dask.computeDaskCollection.computeClient.compute)。

  • dask.base.collections_to_dsk 已重命名为 collections_to_expr,并且不再返回 HighLevelGraphdict 对象,而是保证返回一个 dask._expr.Expr 对象。此外,它不再立即执行低级优化,而是延迟到 Expr 实例被具现化时,即返回的对象不再是一个映射,因此无法将其转换为 dict 或对其进行迭代。

其他变更

2025.3.0

重点

xarray.apply_ufunc 中自动调整块大小

apply_ufunc 要求核心维度具有 chunksize=-1。底层的 rechunking 操作会自动调整核心维度的块大小,但保持其他维度不变。这可能导致底层块大小爆炸。

此版本增加了一个中间步骤,该步骤会以核心维度增加的相同因子调整非核心维度的大小,以控制最大块大小。当设置 allow_rechunk=True 时,此行为自动启用。

import xarray as xr
import dask.array as da

arr = xr.DataArray(
    da.random.random((1, 750, 45910), chunks=(1, "auto", -1)),
    dims=["band", "y", "x"],
)

result = arr.interp(
    y=arr.coords["y"],
    method="linear",
)

此前

单个块大小爆炸到 25 GiB,很可能导致内存不足错误。

Individual chunks are exploding to 25 GiB, likely causing out of memory errors.

现在

Dask 现在会自动将单个块拆分为具有相同块大小减去少量容差的块。

Individual chunks are now roughly the same size
其他变更

2025.2.0

重点

此版本包含一个关键修复,解决了当 seceded 任务被重新调度或取消并重新提交时(例如由于 worker 丢失)可能出现的死锁问题。

更多详细信息请参阅 distributed#8991 by Hendrik Makait

其他变更

2025.1.0

重点

移除了遗留的 Dask DataFrame 实现

此版本移除了遗留的 Dask DataFrame 实现。带查询规划的 API 现在是唯一的 Dask DataFrame 实现。

这强制执行了配置的弃用

dask.config.set({"dataframe.query-planning": False})

Dask-Expr 已合并到 dask 包以及 dask/dask 仓库中。不再需要单独安装 dask-expr。

减少 Xarray 工作负载的内存压力

Dask 在 2022 年引入了一种称为 根任务排队(root task queuing) 的机制。该机制允许 Dask 检测从存储中读取数据的任务,并防御性地调度它们,以避免通过过度生产这些任务而给集群带来内存压力。底层的机制非常脆弱,对于特定类型的计算(例如打开多个 zarr 存储或加载大量 netcdf 文件)会失败。

Dask 任务图表示的最新更改使得根任务的检测更加鲁棒。此更改使得检测机制独立于运行的工作负载,并且尤其有益于 Xarray 工作负载。

这显著提高了内存稳定性,并减少了此前根任务检测失败的工作负载的内存占用,使得预期的内存配置文件具有确定性且独立于任务图的拓扑结构。

2024.12.1

重点

提高了调度器对大型任务图的响应能力

此版本减少了 Dask 调度器用于跟踪任务的 Python 对象引用数量。这通过减少调度器运行垃圾回收所需的时间来提高调度器的响应能力。

更多详细信息请参阅 dask#8958, dask#11608, dask#11600, dask#11598, dask#11597, 和 distributed#8963 by Hendrik Makait

其他变更

2024.12.0

重点

支持 Python 3.13

此版本新增对 Python 3.13 的支持。Dask 现在支持 Python 3.10-3.13。

更多详细信息请参阅 dask#11456distributed#8904 by Patrick HoeflerJames Bourbeau

其他变更

2024.11.2

注意

版本 2024.11.0 和 2024.11.1 包含一个关键的性能回归问题,所有用户都应跳过这两个版本。

重点

遗留 Dask DataFrame 已弃用

此版本弃用了遗留的 Dask DataFrame 实现。旧的实现将在未来的版本中完全移除。鼓励用户现在切换到新的实现,并报告遇到的任何问题。

也鼓励用户检查他们只从 dask.dataframe 导入函数,而不是任何子模块。

Dask Array API 新增 quantile 方法

Dask Array 新增了 quantilenanquantile 方法。此前,Dask 分派给 NumPy 实现,这会大量阻塞 GIL。这导致 worker 在拥有多个线程时出现严重 slowdown,并且可能导致每个 chunk 的运行时超过 200 秒。

新的 quantile 实现避免了许多这些问题,并将运行时减少到每个 chunk 大约 1 秒,且与线程数量无关。

Xarray rolling-construct 中一致的块大小

在 Dask Arrays 中使用 Xarrays rolling(...).construct(...) 会导致非常大的块大小,这些块大小通常不适合单个 worker 的内存。

底层操作是对较小的 NumPy 数组的视图,但触发数据复制将导致非常大的内存使用。

import xarray as xr
import dask.array as da

arr = xr.DataArray(
    da.ones((93504, 721, 1440), chunks=("auto", -1, -1)),
    dims=["time", "lat", "longitude"],
)   # Initial chunks are ~128 MiB
arr.rolling(time=30).construct("window_dim")

此前

单个块大小爆炸到 10 GiB,很可能导致内存不足错误。

Individual chunks are exploding to 10 GiB, likely causing out of memory errors.

现在

Dask 现在会自动将单个块拆分为具有相同块大小减去少量容差的块。

Individual chunks are now roughly the same size

提高了 map overlap 的效率

map_overlap 现在创建更小、更高效的图,以保持任务图整体小得多。

旧版本注入了许多不必要的任务,将任务数量增加了实际所需数量的 2-10 倍。这对调度器造成了很大压力。

爱因斯坦求和 (Einstein summation) 的一致块大小

如果应用于多个 Dask Array,爱因斯坦求和此前会导致非常大的块大小。此行为继承自 NumPy,但导致 worker 上出现内存不足错误。

import dask.array as da
arr = da.random.random((1024, 64, 64, 64, 64), chunks=(256, 16, 16, 16, 16)) # Initial chunks are 128 MiB
result = da.einsum("aijkl,amnop->ijklmnop", arr, arr)

此前

单个块大小爆炸到 32 GiB,很可能导致内存不足错误。

Individual chunks are exploding to 32 GiB, very likely causing out of memory errors

现在

该操作保持单个块大小不变。

Individual chunks are now roughly the same size
其他变更

2024.10.0

显著变化

  • Zarr-Python 3 兼容性 (dask#11388)

  • 避免在 overlap 中任务图呈指数增长 (dask#11423)

  • 确保 numba tokenization 不使用慢速 pickle 路径 (dask#11419)

其他变更

2024.9.1

亮点

改进的自适应扩展弹性

自适应扩展集群现在可以从扩展期间的虚假错误中恢复。

更多详细信息请参见 distributed#8871,作者 Hendrik Makait

其他变更

2024.9.0

亮点

将 Bokeh 最低版本提升到 3.1.0

诊断和分布式集群仪表盘现在需要 bokeh>=3.1.0

更多详细信息请参见 dask#11375distributed#8861,作者 James Bourbeau

引入新的 Task 类

添加 Task 类,用于替代 tuple 进行任务规范。

更多详细信息请参见 dask#11248,作者 Florian Jetter

其他变更

2024.8.2

亮点

rechunking 方法的自动选择

为了使用户能够以比以前更大的规模重新分块数据,Dask 现在在集群上进行 rechunking 时会自动选择合适的 rechunking 方法。这不需要额外的配置,并且默认启用。

具体来说,Dask 在基于任务的 rechunking 和 P2P rechunking 之间进行选择。基于任务的 rechunking 是以前的默认方法,而当 rechunking 需要新旧块之间几乎所有对所有的通信时(例如,在空间和时间分块之间切换时),P2P rechunking 更具优势。在这些情况下,P2P rechunking 提供恒定的内存使用量并创建更小的任务图。因此,它适用于以前基于任务的 rechunking 会失败的情况。

要禁用自动选择,用户可以通过配置选择他们偏好的方法

import dask.config
# Choose either "tasks" or "p2p"
dask.config.set({"array.rechunk.method": "tasks"})

或在 rechunking 时

import dask.array as da
arr = da.random.random(size=(1000, 1000, 365), chunks=(-1, -1, "auto"))
# Choose either "tasks" or "p2p"
arr = arr.rechunk(("auto", "auto", -1), method="tasks")

更多详细信息请参见 dask#11337,作者 Hendrik Makait

Dask 数组的新 shuffle API

Dask 为 Dask 数组添加了一个 shuffle API。这个 API 允许沿单个维度对数据进行混洗 (shuffling)。它将确保沿此维度的每组元素都恰好位于一个块中。这对于 Xarray 中的 GroupBy-Map 模式来说是一个非常有用的操作。有关更多信息和 API 签名,参见 shuffle()

更多详细信息请参见 dask#11267dask#11311dask#11326,作者 Patrick Hoefler

Dask 数组的新 blockwise_reshape API

新的 blockwise_reshape() 可以在你不关心底层数组顺序的情况下进行“非常并行化”(embarassingly parallel) 的重塑操作。它是“非常并行化”的,并且不再在底层触发 rechunking 操作。这在你不需要关心结果数组的顺序时很有用,例如对数组应用归约(reduction)时,或者重塑只是临时操作时。

arr = da.random.random(size=(100, 100, 48_000), chunks=(1000, 100, 83)
result = reshape_blockwise(arr, (10_000, 48_000))
result.sum()

# or: do something that preserves the shape of each chunk

result = reshape_blockwise(result, (100, 100, 48_000), chunks=arr.chunks)

如果维度数量减少,Dask 将自动计算结果块;如果维度数量增加,则必须指定结果块。

重塑 Dask 数组通常会在中间产生包含 rechunk 操作的非常复杂的计算,因为 Dask 默认遵循数组的 C 顺序。这确保了生成的 Dask 数组以与相应 NumPy 数组相同的顺序返回。然而,这可能导致非常低效的计算。如果你不关心顺序,blockwise_reshape 比默认实现效率高得多。

警告

Blockwise 重塑操作比默认操作更有效率,但它们会返回顺序不同的数组。请谨慎使用!

更多详细信息请参见 dask#11328,作者 Patrick Hoefler

保持块大小一致的多维位置索引

以前,使用 vindex() 索引 Dask 数组会在被索引的维度上创建一个单一的输出块。vindex 通常在 Xarray 中用于一次性索引多个维度,例如:

arr = xr.DataArray(
    da.random.random((100, 100, 100), chunks=(5, 5, 50)),
    dims=['a', "b", "c"],
)

以前,这将索引的维度放入一个单一的块中

Size of each individual chunk increases to over 1GB

Dask 现在使用改进的算法来确保块大小保持一致

Size of each individual chunk increases to over 1GB

更多详细信息请参见 dask#11330,作者 Patrick Hoefler

其他变更

2024.8.1

亮点

改进重塑 Dask 数组的输出块大小

重塑 Dask 数组通常会将需要重塑的维度压缩到一个单一的块中。这导致了非常大的输出块,随后产生了许多内存不足错误和性能问题。

arr = da.ones(shape=(1000, 100, 48_000), chunks=(1000, 100, 83))
arr.reshape(1000, 100, 4, 12_000)

以前,这将最后一个维度放入一个大小为 12_000 的单一块中。

Size of each individual chunk increases to over 1GB

新算法将确保输入和输出之间的块大小保持一致。这将避免块大小的大幅增加和块的碎片化。

Size of each individual chunk stays the same

提高 Xarray Rechunk-GroupBy-Reduce 模式的调度效率

以前,scheduler 为使用 cohorts 策略的 Xarray GroupBy-Reduction 模式创建了低效的执行图

import xarray as xr

arr = xr.open_zarr(...)
arr.chunk(time=TimeResampler("ME")).groupby("time.month").mean()

生成任务图执行顺序的算法存在一个问题,导致了低效的执行策略,在集群上累积了许多不必要的内存。这项改进与 2024.08.0 中的先前排序改进非常相似。

放弃对 Python 3.9 的支持

根据 NEP 29,此版本放弃对 Python 3.9 的支持。Python 3.10 现在是运行 Dask 所需的最低版本。

更多详细信息请参见 dask#11245distributed#8793,作者 Patrick Hoefler

其他变更

2024.8.0

亮点

提高使用位置索引器进行切片的效率和性能

使用位置索引器对 Dask 数组进行切片的性能改进。现在随机访问模式更稳定,并产生更易于使用的结果。

x[slice(None), [1, 1, 3, 6, 3, 4, 5]]

以前使用位置索引器容易导致输出块数量急剧增加并生成非常大的任务图。这已通过更高效的算法得到修复。

新算法将沿被索引的轴保持相同的块大小,以避免块的碎片化或块大小的大幅增加。

更多详细信息和性能基准测试请参见 dask#11262dask#11267,作者 Patrick Hoefler

提高 Xarray GroupBy-Reduce 模式的调度效率

以前,scheduler 为诸如以下 Xarray GroupBy-Reduction 模式创建了低效的执行图:

import xarray as xr

arr = xr.open_zarr(...)
arr.groupby("time.month").mean()

生成任务图执行顺序的算法存在一个问题,导致了低效的执行策略,在集群上累积了许多不必要的内存。

Memory keeps accumulating on the cluster when running an embarassingly parallel operation.

该操作本身是“非常并行化”的。使用正确的执行策略,scheduler 现在可以用恒定内存执行操作,避免溢出,并允许我们扩展到更大的数据集。

Same operation is running with constant memory usage for the whole computation and can scale for bigger datasets.

更多详细信息和示例请参见 distributed#8818,作者 Patrick Hoefler

其他变更

2024.7.1

亮点

更具弹性的分布式锁

distributed.Lock () 现在对 worker 故障具有弹性。以前,在持有锁的 worker 丢失和/或因错误未能释放锁的情况下,可能会发生死锁。

更多详细信息请参见 distributed#8770,作者 Florian Jetter

其他变更

2024.7.0

亮点

放弃对 pandas 1.x 的支持

此版本放弃对 pandas<2 的支持。pandas 2.0 现在是运行 Dask DataFrame 所需的最低版本。

partd 的最低版本也提升到 1.4.0。1.4 版本之前的不兼容 pandas 2。

更多详细信息请参见 dask#11199,作者 Patrick Hoefler

发布-订阅 API 废弃

distributed.Pub () 和 distributed.Sub () 已被废弃,并将在未来版本中移除。请改用 distributed.Client.log_event() () 和 distributed.Worker.log_event() ()。

更多详细信息请参见 distributed#8724,作者 Hendrik Makait

其他变更

2024.6.2

这是为了解决 2024.6.1 版本中 daskdistributed 版本固定问题而发布的补丁版本。

其他变更

2024.6.1

亮点

此版本包含一个关键修复,修复了当 root-ish 任务的依赖被重新调度时(例如由于 worker 丢失)可能出现的死锁问题。

更多详细信息请参见 distributed#8703,作者 Hendrik Makait

其他变更

2024.6.0

亮点

memmap 数组 tokenization

现在对 memmap 数组进行 tokenization 将避免将数组实体化到内存中。

更多详细信息请参见 dask#11161,作者 Florian Jetter

其他变更

2024.5.2

此版本主要包含一些小的错误修复。

其他变更

2024.5.1

亮点

支持 NumPy 2.0

此版本包含对即将发布的 NumPy 2.0 版本的兼容性更新。

详见 dask#11096 (由 Benjamin Zaitlen 提交) 和 dask#11106 (由 James Bourbeau 提交) 了解更多详情。

增加对 Zarr 存储的支持

此版本增加了对 MutableMapping 支持的 Zarr 存储(如 zarr.storage.DirectoryStore 等)的支持。

详见 dask#10422 (由 Greg M. Fleishman 提交) 了解更多详情。

其他变更

2024.5.0

亮点

此版本主要包含一些小的错误修复。

其他变更

2024.4.2

亮点

简化合并实现

查询优化器将检查查询以确定 merge(...)groupby(...).apply(...) 是否需要 shuffle。如果 DataFrame 在之前的步骤中已在相同列上进行了 shuffle,并且中间没有任何操作改变分区布局或每个分区中的相关值,则可以避免 shuffle。

>>> result = df.merge(df2, on="a")
>>> result = result.merge(df3, on="a")

查询优化器将识别出 result 之前也在 "a" 上进行了 shuffle,因此在执行块式合并之前,只对 df3 进行 shuffle。

read_parquet 中自动分区

如果单个分区过小,查询优化器将自动对从 Parquet 文件读取的数据集进行重新分区。这将减少分区的数量,从而减小任务图的大小。

优化器旨在生成至少 75MB 的分区,并在必要时合并多个文件以达到此阈值。该值可以通过以下方式配置

>>> dask.config.set({"dataframe.parquet.minimum-partition-size": 100_000_000})

该值以字节为单位。默认阈值相对保守,以避免每个线程内存量相对较小的工作节点上的内存问题。

其他变更

2024.4.1

这是一个小的错误修复版本,它修复了在 Python 3.11.9 中导入 dask.dataframe 时出现的错误。

详见 dask#11035dask#11039 (由 Richard (Rick) Zamora 提交) 了解详情。

其他变更

2024.4.0

亮点

查询规划修复

此版本包含 Dask DataFrame 新查询规划器的各种错误修复。

GPU 指标仪表板修复

GPU 内存和利用率仪表板功能已恢复。此前这些图表意外留白。

详见 distributed#8572 (由 Benjamin Zaitlen 提交) 了解详情。

其他变更

2024.3.1

这是一个小型版本,主要将未安装 dask-expr 时的异常降级为警告。

其他变更

2024.3.0

发布于 2024 年 3 月 11 日

亮点

查询规划

此版本默认对所有 dask.dataframe 用户启用查询规划。

查询规划功能表示使用 dask-expr 重写了 DataFrame。这是一个直接替换,我们预计大多数用户无需调整任何代码。任何反馈都可以在 Dask 问题跟踪器查询规划反馈问题上报告。

如果遇到任何问题,您仍然可以通过设置以下选项来选择退出:

>>> import dask
>>> dask.config.set({'dataframe.query-planning': False})

结束对 Pandas 1.X 的支持

新的查询规划后端至少需要 pandas 2.0。如果您通过 conda 安装,或者通过 pip 使用 dask[complete]dask[dataframe] 安装,将自动安装此 pandas 版本。

如果您在安装 dask 时不带 extras,旧的 DataFrame 实现仍然支持 pandas 1.X

其他变更

2024.2.1

发布于 2024 年 2 月 23 日

亮点

允许静默 dask.DataFrame 弃用警告

上一个版本包含一个 DeprecationWarning,它提醒用户 dask.dafaframe 即将切换到支持查询规划的新后端(详见 dask#10934)。

DeprecationWarning 在导入 dask.dataframe 模块时触发,社区对此过于冗长表示担忧。

现在可以静默此警告:

# via Python
>>> dask.config.set({'dataframe.query-planning-warning': False})

# via CLI
dask config set dataframe.query-planning-warning False

详见 dask#10936dask#10925 (由 Miles 提交) 了解详情。

针对罕见键冲突的更健壮的分布式调度器

块式融合优化可能导致任务键冲突,分布式调度器未能正确处理(详见 dask#9888)。用户通常会通过看到导致系统死锁或关键故障的各种内部异常之一来注意到这一点。虽然此问题无法修复,但调度器现在实现了一种机制,可以缓解大多数情况,并在检测到问题时发出警告。

详见 distributed#8185 (由 crusaderkyFlorian Jetter 提交) 了解详情。

在此过程中,对 tokenization 进行了各种改进。详见 dask#10913, dask#10884, dask#10919, dask#10896,以及主要由 crusaderky 提交的 dask#10883 了解更多详情。

在大型集群上更健壮的自适应扩缩容

以前,如果在缩减时需要移动大量任务,自适应扩缩容可能会丢失数据。这通常(但不限于)发生在大型集群上,表现为任务的重新计算,可能导致集群在扩容和缩减之间振荡而永远无法完成。

详见 distributed#8522 (由 crusaderky 提交) 了解更多详情。

其他变更

2024.2.0

发布于 2024 年 2 月 9 日

亮点

弃用 Dask DataFrame 实现

当前的 Dask DataFrame 实现已被弃用。在未来的版本中,Dask DataFrame 将使用包含多项改进(包括逻辑查询规划)的新实现。面向用户的 DataFrame API 将保持不变。

新实现已可用,可通过安装 dask-expr 库来启用

$ pip install dask-expr

并开启查询规划选项

>>> import dask
>>> dask.config.set({'dataframe.query-planning': True})
>>> import dask.dataframe as dd

新实现的 API 文档可在 https://docs.dask.org.cn/en/stable/dataframe-api.html 查看。

任何反馈都可以在 Dask 问题跟踪器 https://github.com/dask/dask/issues 上报告。

详见 dask#10912 (由 Patrick Hoefler 提交) 了解详情。

改进的 tokenization

此版本包含 Dask 对象 tokenization 逻辑的多项改进。现在有更多对象生成确定性的 tokens,这可以通过缓存中间结果来提高性能。

详见 dask#10898, dask#10904, dask#10876, dask#10874, 和 dask#10865 (由 crusaderky 提交) 了解详情。

其他变更

2024.1.1

发布于 2024 年 1 月 26 日

亮点

支持 Pandas 2.2 和 Scipy 1.12

此版本包含对最新 pandasscipy 版本的兼容性更新。

详见 dask#10834, dask#10849, dask#10845, 和 distributed#8474 (由 crusaderky 提交) 了解详情。

弃用项

其他变更

2024.1.0

发布于 2024 年 1 月 12 日

亮点

P2P 内的部分重新分块

P2P 重新分块现在利用了输入和输出块之间的关系。对于不需要全对全数据传输的情况,这可以显著减少运行时间和内存/磁盘占用。它还支持任务裁剪。

详情请参阅 distributed#8330,由 Hendrik Makait 贡献。

Fastparquet 引擎已废弃

fastparquet Parquet 引擎已被废弃。用户应迁移到 pyarrow 引擎,方法是安装 PyArrow 并在 read_parquetto_parquet 调用中移除 engine="fastparquet"

详情请参阅 dask#10743,由 crusaderky 贡献。

改进了任意数据的序列化

此版本提高了任意数据的序列化健壮性。以前在某些情况下,对于非 msgpack 可序列化的数据,序列化可能会失败。在这些情况下,我们现在回退到使用 pickle

详情请参阅 dask#8447,由 Hendrik Makait 贡献。

额外废弃项

其他变更

2023.12.1

发布于 2023 年 12 月 15 日

亮点

Dask DataFrame 现已支持逻辑查询计划

Dask DataFrame 通过使用逻辑查询规划器,现在性能显著提升。此功能目前默认关闭,但可以通过以下方式开启:

dask.config.set({"dataframe.query-planning": True})

您还需要安装 dask-expr

pip install dask-expr

我们已经看到有希望的性能改进,更多信息请参阅 这篇博文这些定期更新的基准测试。关于查询优化器工作原理的更详细解释可以在 这篇博文 中找到。

此功能仍在积极开发中,API 尚未稳定,因此可能会发生重大更改。我们预计明年初将查询优化器设为默认选项。

详情请参阅 dask#10634,由 Patrick Hoefler 贡献。

read_parquet 中的 Dtype 推断

read_parquet 现在将把 Arrow 类型 pa.date32(), pa.date64()pa.decimal() 推断为 pandas 中的 ArrowDtype。这些 dtypes 由原始 Arrow 数组支持,因此避免了转换为 NumPy object。此外,read_parquet 将不再将嵌套和二进制类型推断为字符串,它们将存储在 NumPy object 数组中。

详情请参阅 dask#10698dask#10705,由 Patrick Hoefler 贡献。

改进调度以减少内存使用

此版本包括对我们调度逻辑核心部分的重大重写。它包括 dask.order 中拓扑排序算法的新方法,该方法确定任务的运行顺序。已知不当的排序是导致集群内存压力过大的主要因素。

此版本中的更新修复了 2023.10.0 版本中引入的一些性能回退(参阅 dask#10535)。通常,如果数据不再需要存在于内存中,计算现在会更积极地释放数据。

详情请参阅 dask#10660dask#10697,由 Florian Jetter 贡献。

改进了基于 P2P 的合并健壮性和性能

此版本包含多项更新,修复了 2023.9.2 中引入的可能死锁问题,并提高了集群动态扩容时基于 P2P 合并的健壮性。

详情请参阅 distributed#8415, distributed#8416, 和 distributed#8414,由 Hendrik Makait 贡献。

移除禁用 pickle 选项

distributed.scheduler.pickle 配置选项不再支持。从 2023.4.0 版本开始,pickle 用于传输任务图,因此无法再禁用。当 distributed.scheduler.pickle 设置为 False 时,我们现在会抛出一个信息性错误。

详情请参阅 distributed#8401,由 Florian Jetter 贡献。

其他变更

2023.12.0

发布于 2023 年 12 月 1 日

亮点

PipInstall 重启和环境变量

distributed.PipInstall 插件现在具有更健壮的重启逻辑,并且还支持环境变量

下面展示了用户如何使用 distributed.PipInstall 插件和 TOKEN 环境变量来安全地从私有仓库安装包

from dask.distributed import PipInstall
plugin = PipInstall(packages=["private_package@git+https://${TOKEN}@github.com/dask/private_package.git])
client.register_plugin(plugin)

详情请参阅 distributed#8374, distributed#8357, 和 distributed#8343,由 Hendrik Makait 贡献。

Bokeh 3.3.0 兼容性

此版本包含使用 bokeh>=3.3.0 与代理 Dask dashboards 的兼容性更新。之前 dashboard plots 的内容不会显示。

详情请参阅 distributed#8347distributed#8381,由 Jacob Tomlinson 贡献。

其他变更

2023.11.0

发布于 2023 年 11 月 10 日

亮点

零拷贝 P2P 数组重新分块

在使用内存中 P2P 数组重新分块时,用户应看到显著的性能提升。这是由于不再复制底层数据缓冲区。

下面展示了一个简单的示例,我们比较了不同 rechunking 方法的性能。

shape = (30_000, 6_000, 150) # 201.17 GiB
input_chunks = (60, -1, -1) # 411.99 MiB
output_chunks = (-1, 6, -1) # 205.99 MiB

arr = da.random.random(size, chunks=input_chunks)
with dask.config.set({
    "array.rechunk.method": "p2p",
    "distributed.p2p.disk": True,
}):
    (
      da.random.random(size, chunks=input_chunks)
      .rechunk(output_chunks)
      .sum()
      .compute()
    )
A comparison of rechunking performance between the different methods tasks, p2p with disk and p2p without disk on different cluster sizes. The graph shows that p2p without disk is up to 60% faster than the default tasks based approach.

详情请参阅 distributed#8282, distributed#8318, distributed#8321,由 crusaderky 贡献;以及 (distributed#8322),由 Hendrik Makait 贡献。

废弃 PyArrow <14.0.1

从本版本开始废弃使用 pyarrow<14.0.1。建议所有用户升级他们的 pyarrow 版本或安装 pyarrow-hotfix。详情请参阅 此 CVE

详情请参阅 dask#10622,由 Florian Jetter 贡献。

改进 Parquet 的 PyArrow 文件系统

读取 Parquet 数据集时使用 filesystem="arrow" 现在可以正确推断访问远程、云托管数据时的正确云区域。

详情请参阅 dask#10590,由 Richard (Rick) Zamora 贡献。

改进 P2P Shuffling 中的类型协调

详情请参阅 distributed#8332,由 Hendrik Makait 贡献。

其他变更

2023.10.1

发布于 2023 年 10 月 27 日

亮点

Python 3.12

此版本添加了对 Python 3.12 的官方支持。

详情请参阅 dask#10544distributed#8223,由 Thomas Grainger 贡献。

其他变更

2023.10.0

发布于 2023 年 10 月 13 日

亮点

减少多数组规约的内存压力

此版本包含对 Dask 任务图调度逻辑核心部分的重大更新。此处的更新显著减少了数组规约的内存压力。我们预计这将对数组计算社区产生强烈影响。

详情请参阅 dask#10535 (作者:Florian Jetter)。

改进的 P2P Shuffle 稳健性

以下列出了几项更新,它们使得 P2P Shuffle 更加稳健,失败的可能性更低。

详情请参阅 distributed#8262distributed#8264distributed#8242distributed#8244distributed#8235 (作者:Hendrik Makait),以及 distributed#8124 (作者:Charles Blackmon-Luca)。

减少大型图的调度器 CPU 负载

用户在计算大型任务图时,应该会发现其调度器的 CPU 负载降低了。

详情请参阅 distributed#8238dask#10547 (作者:Florian Jetter),以及 distributed#8240 (作者:crusaderky)。

其他变更

2023.9.3

发布于 2023 年 9 月 29 日

亮点

恢复之前的配置覆盖行为

2023.9.2 版本引入了非预期的破坏性更改,影响了在 dask.config.get 中使用 override_with= 关键字覆盖配置选项的方式(参见 dask#10519)。本次发布恢复了之前的行为。

详情请参阅 dask#10521 (作者:crusaderky)。

Dask Array Reduction 中的复数 dtype

本次发布改进了对在 Dask Array 中使用常见 Reduction(例如 varstdmoment)处理复数 dtype 的支持。

详情请参阅 dask#10009 (作者:wkrasnicki)。

其他变更

2023.9.2

发布于 2023 年 9 月 15 日

亮点

P2P Shuffle 在安装过时 PyArrow 时抛出错误

之前,如果安装了旧版本的 pyarrow,默认的 Shuffle 方法会静默地从 P2P 回退到基于任务的 Shuffle。现在,我们不再静默回退,而是抛出一个包含 P2P 所需最低 pyarrow 版本的提示性错误。

详情请参阅 dask#10496 (作者:Hendrik Makait)。

admin.traceback.shorten 的弃用周期

2023.9.0 版本修改了 admin.traceback.shorten 配置选项,但未引入弃用周期。这导致在某些情况下无法创建 Dask 集群。本次发布为这项配置更改引入了弃用周期。

详情请参阅 dask#10509 (作者:crusaderky)。

其他变更

2023.9.1

发布于 2023 年 9 月 6 日

注意

这是一个热修复版本,修复了 2023.9.0 版本引入的 P2P Shuffle Bug(参见 dask#10493)。

改进

Bug 修复

维护

2023.9.0

发布于 2023 年 9 月 1 日

Bug 修复

文档

维护

2023.8.1

发布于 2023 年 8 月 18 日

改进

Bug 修复

  • 修复在附加模式且 single_fileTrue 时运行 to_csv 导致的 ValueErrordask#10441Ben

维护

2023.8.0

发布于 2023 年 8 月 4 日

改进

文档

维护

2023.7.1

发布于 2023 年 7 月 20 日

注意

本次发布更新了 Dask DataFrame,如果安装了 pandas>=2pyarrow>=12,将自动把使用 object 数据类型的文本数据转换为 string[pyarrow]

这应该会显著减少许多处理文本数据的工作流程的内存消耗,并提高计算性能。

您可以通过设置配置值 dataframe.convert-stringFalse 来禁用此更改:

dask.config.set({"dataframe.convert-string": False})

改进

Bug 修复

2023.7.0

发布于 2023 年 7 月 7 日

改进

Bug 修复

文档

维护

2023.6.1

发布于 2023 年 6 月 26 日

改进

Bug 修复

弃用

维护

2023.6.0

发布于 2023 年 6 月 9 日

改进

Bug 修复

文档

维护

2023.5.1

发布于 2023 年 5 月 26 日

注意

此版本取消对 Python 3.8 的支持。截至本版本,Dask 支持 Python 3.9、3.10 和 3.11。详情请参阅 此社区议题

改进

Bug 修复

文档

维护

2023.5.0

发布于 2023 年 5 月 12 日

改进

Bug 修复

文档

维护

2023.4.1

发布于 2023 年 4 月 28 日

改进

Bug 修复

文档

维护

2023.4.0

发布于 2023 年 4 月 14 日

改进

Bug 修复

废弃项

文档

维护

2023.3.2

发布于 2023 年 3 月 24 日

改进

Bug 修复

文档

维护

2023.3.1

发布于 2023 年 3 月 10 日

改进

Bug 修复

文档

维护

2023.3.0

发布于 2023 年 3 月 1 日

Bug 修复

文档

维护

2023.2.1

发布于 2023 年 2 月 24 日

注意

此版本将默认的 DataFrame shuffle 算法更改为 p2p,以提高稳定性和性能。在此了解更多信息,并请在此讨论中提供反馈

如果您在使用此新算法时遇到问题,请参阅文档以获取更多信息以及如何切换回旧模式。

改进

Bug 修复

文档

维护

2023.2.0

发布于 2023 年 2 月 10 日

改进

错误修复

文档

维护

2023.1.1

发布于 2023 年 1 月 27 日

改进

错误修复

文档

维护

2023.1.0

发布于 2023 年 1 月 13 日

改进

文档

维护

2022.12.1

发布于 2022 年 12 月 16 日

改进

错误修复

文档

维护

2022.12.0

发布于 2022 年 12 月 2 日

改进

错误修复

维护

2022.11.1

发布于 2022 年 11 月 18 日

改进

维护

2022.11.0

发布于 2022 年 11 月 15 日

改进

错误修复

文档

维护

2022.10.2

发布于 2022 年 10 月 31 日

这是一个热修复版本,此仓库中没有更改。必要的修复在 dask/distributed 中,但为了保持一致性,我们决定升级此版本号。

2022.10.1

发布于 2022 年 10 月 28 日

改进

错误修复

文档

维护

2022.10.0

发布于 2022 年 10 月 14 日

新特性

改进

错误修复

文档

维护

2022.9.2

发布于 2022 年 9 月 30 日

改进

文档

维护

2022.9.1

发布于 2022 年 9 月 16 日

新特性

改进

错误修复

弃用

  • 允许 split_outNone,此时在 groupby().aggregate() 中默认值为 1 (dask#9491) Ian Rose

文档

维护

2022.9.0

发布于 2022 年 9 月 2 日

改进

错误修复

文档

维护

2022.8.1

发布于 2022 年 8 月 19 日

新特性

改进

错误修复

文档

维护

2022.8.0

发布于 2022 年 8 月 5 日

改进

错误修复

文档

维护

2022.7.1

发布于 2022 年 7 月 22 日

改进

Bug 修复

文档

维护

2022.7.0

发布于 2022 年 7 月 8 日

改进

Bug 修复

文档

维护

2022.6.1

发布于 2022 年 6 月 24 日

改进

Bug 修复

弃用

文档

维护

2022.6.0

发布于 2022 年 6 月 10 日

改进

Bug 修复

文档

维护

2022.05.2

发布于 2022 年 5 月 26 日

改进

文档

维护

2022.05.1

发布于 2022 年 5 月 24 日

新功能

改进

Bug 修复

弃用

文档

维护

2022.05.0

发布于 2022 年 5 月 2 日

亮点

这是针对 this issue 的一个 bug 修复版本。

文档

2022.04.2

发布于 2022 年 4 月 29 日

亮点

此版本包含对 dask.dataframe.read_parquetdask.dataframe.to_parquet 的一些弃用/破坏性 API 更改

  • to_parquet 默认不再写入 _metadata 文件。如果您想写入 _metadata 文件,可以传入 write_metadata_file=True

  • read_parquet 现在默认为 split_row_groups=False,这在读取 parquet 数据集时会导致每个 parquet 文件对应一个 Dask dataframe 分区。如果您处理的是大型 parquet 文件,可能需要将 split_row_groups=True 设置为 True 来减小分区大小。

  • read_parquet 默认不再计算 divisions。如果您需要 read_parquet 返回具有已知 divisions 的 dataframe,请设置 calculate_divisions=True

  • read_parquet 已弃用 gather_statistics 关键字参数。请改用 calculate_divisions 关键字参数。

  • read_parquet 已弃用 require_extensions 关键字参数。请改用 parquet_file_extension 关键字参数。

新功能

改进

Bug 修复

弃用

文档

维护

2022.04.1

发布于 2022 年 4 月 15 日

新功能

  • 添加缺失的 NumPy ufuncs:absleft_shiftright_shiftpositive。 (dask#8920) Tom White

改进

Bug 修复

弃用

文档

维护

2022.04.0

发布于 2022 年 4 月 1 日

注意

这是首次支持 Python 3.10 的版本

新特性

改进

错误修复

弃用

文档

维护

2022.03.0

发布于 2022 年 3 月 18 日

新特性

改进

错误修复

弃用

文档

维护

2022.02.1

发布于 2022 年 2 月 25 日

新特性

改进

错误修复

弃用

文档

维护

2022.02.0

发布于 2022 年 2 月 11 日

注意

这是最后一个支持 Python 3.7 的版本

新特性

改进

错误修复

弃用

文档

维护

2022.01.1

发布于 2022 年 1 月 28 日

新特性

改进

错误修复

弃用

文档

维护

2022.01.0

发布于 2022 年 1 月 14 日

新特性

改进

错误修复

弃用

文档

维护

2021.12.0

发布于 2021 年 12 月 10 日

新特性

改进

错误修复

弃用

文档

维护

2021.11.2

发布于 2021 年 11 月 19 日

2021.11.1

发布于 2021 年 11 月 8 日

补丁版本,将 distributed 依赖更新至 2021.11.1 版本。

2021.11.0

发布于 2021 年 11 月 5 日

2021.10.0

发布于 2021 年 10 月 22 日

2021.09.1

发布于 2021 年 9 月 21 日

2021.09.0

发布于 2021 年 9 月 3 日

2021.08.1

发布于 2021 年 8 月 20 日

2021.08.0

发布于 2021 年 8 月 13 日

2021.07.2

发布于 2021 年 7 月 30 日

注意

这是支持 NumPy 1.17 和 pandas 0.25 的最后一个版本。从下一版本开始,NumPy 1.18 和 pandas 1.0 将成为最低支持版本。

2021.07.1

发布于 2021 年 7 月 23 日

2021.07.0

发布于 2021 年 7 月 9 日

2021.06.2

发布于 2021 年 6 月 22 日

2021.06.1

发布于 2021 年 6 月 18 日

2021.06.0

发布于 2021 年 6 月 4 日

2021.05.1

发布于 2021 年 5 月 28 日

2021.05.0

发布于 2021 年 5 月 14 日

2021.04.1

发布于 2021 年 4 月 23 日

2021.04.0

发布于 2021 年 4 月 2 日

2021.03.1

发布于 2021 年 3 月 26 日

2021.03.0

发布于 2021 年 3 月 5 日

注意

这是第一个支持 Python 3.9 的版本,也是最后一个支持 Python 3.6 的版本

2021.02.0

发布于 2021 年 2 月 5 日

2021.01.1

发布于 2021 年 1 月 22 日

2021.01.0

发布于 2021 年 1 月 15 日

2020.12.0

发布于 2020 年 12 月 10 日

重点

  • 版本控制方案切换到 CalVer

  • 引入新的 HighLevelGraph API,以支持将任务图的高层表示发送到分布式调度器。

  • 引入新的 HighLevelGraph 层对象,包括 BasicLayer, Blockwise, BlockwiseIO, ShuffleLayer, 等等。

  • 添加了对使用 dask.annotations 上下文管理器应用自定义 Layer 级别注解(如 priority, retries 等)的支持。

  • 将 pandas 的最低支持版本更新到 0.25.0,NumPy 更新到 1.15.1。

  • 支持将 pyarrow.dataset API 应用到 read_parquet

  • 修复了 Dask Array SVD 的多个问题。

所有更改

2.30.0 / 2020-10-06

Array

2.29.0 / 2020-10-02

Array

Bag

Core

DataFrame

Documentation

2.28.0 / 2020-09-25

Array

Core

DataFrame

2.27.0 / 2020-09-18

Array

Core

DataFrame

Documentation

2.26.0 / 2020-09-11

Array

Core

DataFrame

Documentation

2.25.0 / 2020-08-28

Core

DataFrame

Documentation

2.24.0 / 2020-08-22

Array

Dataframe

Core

2.23.0 / 2020-08-14

Array

Bag

Core

DataFrame

Documentation

2.22.0 / 2020-07-31

Array

Core

DataFrame

Documentation

2.21.0 / 2020-07-17

Array

Bag

Core

DataFrame

Documentation

2.20.0 / 2020-07-02

Array

DataFrame

Documentation

2.19.0 / 2020-06-19

Array

Core

DataFrame

Documentation

2.18.1 / 2020-06-09

Array

Core

Documentation

2.18.0 / 2020-06-05

Array

Bag

DataFrame

文档

2.17.2 / 2020-05-28

核心

DataFrame

2.17.1 / 2020-05-28

Array

核心

DataFrame

2.17.0 / 2020-05-26

Array

Bag

核心

DataFrame

文档

2.16.0 / 2020-05-08

Array

核心

DataFrame

文档

2.15.0 / 2020-04-24

Array

核心

DataFrame

文档

2.14.0 / 2020-04-03

Array

核心

DataFrame

文档

2.13.0 / 2020-03-25

Array

Bag

核心

DataFrame

文档

2.12.0 / 2020-03-06

Array

核心

DataFrame

文档

2.11.0 / 2020-02-19

Array

Bag

核心

DataFrame

文档

2.10.1 / 2020-01-30

2.10.0 / 2020-01-28

2.9.2 / 2020-01-16

Array

核心

DataFrame

文档

2.9.1 / 2019-12-27

Array

核心

DataFrame

文档

2.9.0 / 2019-12-06

Array

核心

DataFrame

文档

2.8.1 / 2019-11-22

Array

核心

DataFrame

文档

2.8.0 / 2019-11-14

Array

Bag

核心

DataFrame

文档

2.7.0 / 2019-11-08

此版本不再支持 Python 3.5

Array

核心

DataFrame

文档

2.6.0 / 2019-10-15

核心

DataFrame

文档

2.5.2 / 2019-10-04

数组

DataFrame

文档

2.5.0 / 2019-09-27

核心

DataFrame

文档

2.4.0 / 2019-09-13

数组

核心

DataFrame

文档

2.3.0 / 2019-08-16

数组

Bag

核心

DataFrame

文档

2.2.0 / 2019-08-01

数组

Bag

核心

DataFrame

文档

2.1.0 / 2019-07-08

数组

核心

DataFrame

文档

2.0.0 / 2019-06-25

数组

核心

DataFrame

文档

1.2.2 / 2019-05-08

数组

Bag

核心

DataFrame

文档

1.2.1 / 2019-04-29

数组

核心

DataFrame

文档

1.2.0 / 2019-04-12

Array

Core

DataFrame

Documentation

1.1.5 / 2019-03-29

Array

Core

DataFrame

Documentation

1.1.4 / 2019-03-08

Array

Core

DataFrame

Documentation

1.1.3 / 2019-03-01

Array

DataFrame

Documentation

1.1.2 / 2019-02-25

Array

Bag

DataFrame

Documentation

Core

1.1.1 / 2019-01-31

Array

DataFrame

Delayed

Documentation

Core

  • 解决 psutil 5.5.0 不允许 pickle Process 对象的限制 Janne Vuorela

1.1.0 / 2019-01-18

Array

DataFrame

Documentation

Core

1.0.0 / 2018-11-28

Array

DataFrame

Documentation

Core

0.20.2 / 2018-11-15

Array

Dataframe

Documentation

0.20.1 / 2018-11-09

Array

Core

Dataframe

Documentation

0.20.0 / 2018-10-26

Array

Bag

Core

Dataframe

Documentation

0.19.4 / 2018-10-09

Array

Bag

Dataframe

Core

Documentation

0.19.3 / 2018-10-05

Array

Bag

Dataframe

Core

Documentation

0.19.2 / 2018-09-17

Array

Core

Documentation

0.19.1 / 2018-09-06

Array

Dataframe

Documentation

0.19.0 / 2018-08-29

Array

DataFrame

Core

Docs

0.18.2 / 2018-07-23

Array

Bag

数据帧

延迟对象

核心

0.18.1 / 2018-06-22

数组

数据帧

核心

0.18.0 / 2018-06-14

数组

数据帧

Bag

核心

0.17.5 / 2018-05-16

数组

数据帧

0.17.4 / 2018-05-03

数据帧

0.17.3 / 2018-05-02

数组

数据帧

核心

  • 支持在 persist, visualize 和 optimize 中遍历集合(dask#3410Jim Crist

  • 为 compute 和 persist 添加 schedule= 关键字。这取代了 get= 关键字的常见用法(dask#3448Matthew Rocklin

0.17.2 / 2018-03-21

数组

数据帧

Bag

核心

0.17.1 / 2018-02-22

数组

数据帧

核心

0.17.0 / 2018-02-09

数组

数据帧

Bag

  • 记录 bag.map_paritions 函数可能接收列表或生成器。(dask#3150Nir

核心

0.16.1 / 2018-01-09

数组

数据帧

核心

0.16.0 / 2017-11-17

这是一个主要版本。它包含了破坏性变更、新协议和大量错误修复。

数组

DataFrame

核心

0.15.4 / 2017-10-06

数组

  • da.random.choice 现在支持数组参数 (dask#2781)

  • 支持使用 np.int 对数组进行索引(修复了回归问题) (dask#2719)

  • 处理零维度与 rechunking (dask#2747)

  • chunks 中支持使用 -1 作为“维度大小”的别名 (dask#2749)

  • 在 array.to_npy_stack 中调用 mkdir (dask#2709)

DataFrame

  • 为带有字符串类别的 Categoricals 添加了 .str 访问器 (dask#2743)

  • 在 parquet 写入器中支持 int96 (spark) 日期时间 (dask#2711)

  • 将文件方案传递给 fastparquet (dask#2714)

  • 支持 Pandas 0.21 (dask#2737)

Bag

  • 为 foldby 添加树状归约支持 (dask#2710)

核心

  • pip install dask[complete] 中移除 s3fs (dask#2750)

0.15.3 / 2017-09-24

数组

  • 添加掩码数组 (dask#2301)

  • 添加 *_like array creation functions 数组创建函数 (dask#2640)

  • 使用无符号整数数组进行索引 (dask#2647)

  • 改进了使用不同维度的布尔数组进行切片 (dask#2658)

  • topatop 中支持字面值 (dask#2661)

  • 累积函数中的可选 axis 参数 (dask#2664)

  • 使用 assert_eq 改进对标量的测试 (dask#2681)

  • 修复 norm keepdims (dask#2683)

  • 添加 ptp (dask#2691)

  • 添加 apply_along_axis (dask#2690) 和 apply_over_axes (dask#2702)

DataFrame

  • 添加了 Series.str[index] (dask#2634)

  • 允许 groupby 的 by 参数处理列和索引级别 (dask#2636)

  • DataFrame.to_csvBag.to_textfiles 现在返回文件名,指示写入位置

    (dask#2655)

  • 修复 to_parquetpartition_onappend 的组合问题 (dask#2645)

  • 修复 parquet 文件方案的问题 (dask#2667)

  • Repartition 支持混合分类 (dask#2676)

核心

  • python setup.py test 现在可以运行测试 (dask#2641)

  • 添加了新的速查表 (dask#2649)

  • 移除 Bokeh 图表中的调整大小工具 (dask#2688)

0.15.2 / 2017-08-25

数组

Bag

DataFrame

核心

  • 移除所有地方的裸 except: 块 (dask#2590)

0.15.1 / 2017-07-08

  • 将 storage_options 添加到 to_textfiles 和 to_csv (dask#2466)

  • Rechunk 并简化 rfftfreq (dask#2473), (dask#2475)

  • 更好地支持 ndarray 子类 (dask#2486)

  • 在 dask.distributed 中导入星号 (*) (dask#2503)

  • 使用 tokenization 进行线程安全的缓存处理 (dask#2511)

0.15.0 / 2017-06-09

数组

Bag

  • 修复了对没有分区的 bag 进行归约会失败的错误 (dask#2324)

  • 添加广播和可变参数的 db.map 顶级函数。同时移除将元组自动展开作为 map 参数的行为 (dask#2339)

  • Bag.concat 重命名为 Bag.flatten (dask#2402)

DataFrame

核心

  • 将 dask.async 模块移至 dask.local (dask#2318)

  • 支持嵌套调度器调用时的回调 (dask#2397)

  • 支持将 pathlib.Path 对象作为 uris (dask#2310)

0.14.3 / 2017-05-05

DataFrame

  • 支持 Pandas 0.20.0

0.14.2 / 2017-05-03

数组

Bag

  • to_dataframe 强制执行一致的类型 (dask#2199)

DataFrame

核心

0.14.1 / 2017-03-22

数组

DataFrame

  • 修复 to_parquet 处理空分区的问题 (dask#2020)

  • set_index 中的可选 npartitions='auto' 模式 (dask#2025)

  • 优化 shuffle 性能 (dask#2032)

  • 支持沿时间窗口进行高效重新分区,例如 repartition(freq='12h') (dask#2059)

  • 提高 categorize 的速度 (dask#2010)

  • 支持单行 dataframe 算术运算 (dask#2085)

  • 使用已排序的列设置索引时自动避免 shuffle (dask#2091)

  • 改进 read_csv 中整数-NA 处理 (dask#2098)

Delayed

  • 对 delayed 对象重复属性访问使用相同的键 (dask#2084)

核心

  • 改进 dot 图中的节点命名以避免使用通用的 apply (dask#2070)

  • 确保工作进程具有不同的随机种子 (dask#2094)

0.14.0 / 2017-02-24

数组

Bag

DataFrame

Delayed

  • 为 delayed 添加 traverse= 关键字,以选择性地避免遍历嵌套数据结构 (dask#1899)

  • 在 from_delayed 函数中支持 Futures (dask#1961)

  • 改进装饰的 delayed 函数的序列化 (dask#1969)

核心

  • 改进 Windows 路径解析在边界情况下的处理 (dask#1910)

  • 融合时重命名任务 (dask#1919)

  • 添加顶级 persist 函数 (dask#1927)

  • 在字节处理中传播 errors= 关键字 (dask#1954)

  • Dask.compute 遍历 Python 集合 (dask#1975)

  • dask.array 和 dask.delayed 图之间的结构共享 (dask#1985)

0.13.0 / 2017-01-02

数组

  • dask.array 上的强制 dtypes。所有操作都维护 dtype 信息,并且像 map_blocks 这样的 UDF 函数如果无法推断 dtype,现在需要一个 dtype= 关键字。(dask#1755)

  • 支持形状未知的数组,例如使用数组切片数组或将 dataframe 转换为数组时出现的数组 (dask#1838)

  • 支持通过用另一个数组设置一个数组来修改 (dask#1840)

  • 协方差和相关性的树状归约。(dask#1758)

  • 添加 SerializableLock 以更好地与分布式调度配合使用 (dask#1766)

  • 改进了 atop 支持 (dask#1800)

  • Rechunk 优化 (dask#1737), (dask#1827)

Bag

  • 避免在两次重新计算相同的 groupby 时出现错误结果 (dask#1867)

DataFrame

Delayed

  • 更改了 delayed(nout=0)delayed(nout=1) 的行为:delayed(nout=1) 不再默认 out=None,并且启用了 delayed(nout=0)。也就是说,返回长度为 1 或 0 的元组的函数可以正确处理。这对于通过 delayed 包装具有可变数量输出的函数特别方便。例如,一个简单的例子:delayed(lambda *args: args, nout=len(vals))(*vals)

核心

0.12.0 / 2016-11-03

DataFrame

  • 当提供给 dataframe.map_partitions 的函数返回标量时,返回一个 series (dask#1515)

  • 修复 series 的类型大小推断问题 (dask#1513)

  • dataframe.DataFrame.categorize 不再在 categories 中包含缺失值。这是为了兼容 pandas 的一个变更 pandas change (dask#1565)

  • 修复 dataframe.read_csv 中当某些行包含引号时出现的头部解析器错误 (dask#1495)

  • 添加 dataframe.reductionseries.reduction 方法,用于对 dataframes 和 series 应用通用的行级归约 (dask#1483)

  • 添加 dataframe.select_dtypes,它镜像了 pandas 的方法 pandas method (dask#1556)

  • dataframe.read_hdf 现在支持读取 Series (dask#1564)

  • 支持 Pandas 0.19.0 (dask#1540)

  • 实现 select_dtypes (dask#1556)

  • String accessor 支持索引 (dask#1561)

  • 为 dask.dataframe 添加 pipe 方法 (dask#1567)

  • 为 merge 添加 indicator 关键字 (dask#1575)

  • read_hdf 中支持 Series (dask#1575)

  • 支持包含缺失值的 Categories (dask#1578)

  • 支持像 df.x += 1 这样的 inplace 运算符 (dask#1585)

  • Str accessor 透传 args 和 kwargs (dask#1621)

  • 改进了单机多进程调度器的 groupby 支持 (dask#1625)

  • 树状归约 (dask#1663)

  • 数据透视表 (dask#1665)

  • 添加 clip (dask#1667), align (dask#1668), combine_first (dask#1725), 以及 any/all (dask#1724)

  • 改进了 dask-pandas 合并中分区信息的处理 (dask#1666)

  • 添加 groupby.aggregate 方法 (dask#1678)

  • 添加 dd.read_table 函数 (dask#1682)

  • 改进对多级列的支持 (dask#1697) (dask#1712)

  • loc 中支持 2d 索引 (dask#1726)

  • 扩展 resample 以包含 DataFrames (dask#1741)

  • 在 dask.dataframe 对象上支持 dask.array ufuncs (dask#1669)

数组

Bag

  • 修复 bag.from_sequence 中可调用对象被解释为任务的问题 (dask#1491)

  • 避免在归约中使用非惰性内存 (dask#1747)

管理

  • 添加了更新日志 (dask#1526)

  • 从线程操作时创建新的线程池 (dask#1487)

  • 将示例文档页面合并为一个 (dask#1520)

  • 添加 versioneer 以支持基于 git commit 的版本 (dask#1569)

  • 在 dot 可视化中透传 node_attr 和 edge_attr 关键字 (dask#1614)

  • 添加使用 Appveyor 在 Windows 上进行持续测试 (dask#1648)

  • 移除 multiprocessing.Manager 的使用 (dask#1653)

  • 为 compute 添加全局优化关键字 (dask#1675)

  • 微优化 get_dependencies (dask#1722)

0.11.0 / 2016-08-24

主要亮点

DataFrames 现在在任何地方都强制要求知道完整的元数据(列、dtypes)。以前,当函数丢失 dtype 信息(如 apply)时,我们会在模糊状态下操作。现在,所有 dataframe 总是知道它们的 dtypes,并且如果无法推断(通常可以推断),则会引发错误要求提供信息。一些内部属性,如 _pd_pd_nonempty,已被移动。

分布式调度器的内部已重构,以在显式状态之间转换任务。这提高了弹性、调度推理、插件操作和日志记录。这也使得调度器代码对于新手更容易理解。

破坏性变更

  • distributed.s3distributed.hdfs 命名空间已移除。请改在常规方法中使用协议,例如 read_text('s3://...'

  • Dask.array.reshape 现在在某些情况下会报错,而以前它会创建大量任务

0.10.2 / 2016-07-27

  • 更多 Dataframe shuffle 现在可以在分布式设置中工作,从设置索引到哈希连接,再到排序连接和 groupbys。

  • Dask 在 Python 优化-OO 模式下运行时通过了完整的测试套件。

  • 发现在某些高并发场景(特别是在 Windows 上)中,磁盘 shuffle 会产生错误结果。这已通过修复 partd 库得到解决。

  • 修复了在大数据通信下发生的打开文件描述符增长问题

  • 在 dask-scheduler 的 --bokeh-whitelist 选项中支持指定端口,以便在复杂的网络设置后更好地路由 web 界面消息

  • 对 worker 故障的弹性进行了一些改进(尽管其他已知故障仍然存在)

  • 您现在可以在任何 worker 上启动 IPython 内核,以便改进调试和分析

  • dask.dataframe.read_hdf 的改进,特别是在从多个文件和文档读取时

0.10.0 / 2016-06-13

主要变更

  • 此版本放弃了对 Python 2.6 的支持

  • Conda 包从 conda-forge 构建和提供

  • dask.distributed 可执行文件已从 dfoo 重命名为 dask-foo。例如,dscheduler 已重命名为 dask-scheduler

  • Bag 和 DataFrame 都包含初步的分布式 shuffle。

Bag

  • 为分布式 groupbys 添加基于任务的 shuffle

  • 添加 accumulate 用于累积归约

DataFrame

  • 添加适用于分布式连接、groupby-apply 和 set_index 操作的基于任务的 shuffle。单机 shuffle 保持不变(且效率更高)。

  • 添加对新的 Pandas rolling API 的支持,提高了在分布式系统上的通信性能。

  • 添加 groupby.std/var

  • read_csv 中透传 S3/HDFS 存储选项

  • 改进分类分区

  • 为 dataframes 添加 eval, info, isnull, notnull

分布式

  • 将 dscheduler 等可执行文件重命名为 dask-scheduler

  • 改进调度器在许多快速任务情况下的性能(对 shuffling 很重要)

  • 改进工作窃取,使其能够感知预期的函数运行时间和数据大小。这极大地增加了无需大量用户专业知识即可在分布式调度器上高效运行的算法范围。

  • 支持流队列中的最大缓冲区大小

  • 改进使用 Bokeh 诊断 web 界面时的 Windows 支持

  • 支持协议中对超大字节字符串的压缩

  • 支持在 Joblib 界面中干净地取消提交的 futures

其他

  • 所有与 dask 相关的项目(dask, distributed, s3fs, hdfs, partd)现在都在 conda-forge 上构建 conda 包。

  • 更改 s3fs 中的凭据处理方式,仅在明确给出密钥/键时传递委托凭据。现在的默认行为是依赖托管环境。可以通过明确提供关键字参数来改回。如果需要匿名模式,必须明确声明。

0.9.0 / 2016-05-11

API 变更

  • dask.dodask.value 已重命名为 dask.delayed

  • dask.bag.from_filenames 已重命名为 dask.bag.read_text

  • 所有 S3/HDFS 数据摄取函数,如 db.from_s3distributed.s3.read_csv,已移至普通的 read_textread_csv functions 函数中,这些函数现在支持协议,例如 dd.read_csv('s3://bucket/keys*.csv')

数组

  • 添加对 scipy.LinearOperator 的支持

  • 改进对磁盘数据结构的Optional locking

  • 更改 rechunk 以暴露中间块

Bag

  • from_filenames 重命名为 read_text

  • 移除 from_s3,推荐使用 read_text('s3://...')

DataFrame

  • 修复了相关性和协方差的数值稳定性问题

  • 允许使用无哈希的 from_pandas,以实现与 pandas 对象的快速往返

  • 总体上重新设计了 read_csv,使其更符合 Pandas 的行为

  • 支持对已排序列进行快速 set_index 操作

Delayed

  • do/value 重命名为 delayed

  • to/from_imperative 重命名为 to/from_delayed

分布式

  • 将 s3 和 hdfs 功能移入 dask 仓库

  • 自适应地超额分配 worker 以处理非常快速的任务

  • 改进 PyPy 支持

  • 改进非均衡 worker 的工作窃取

  • 使用树状 scatter 高效地分散数据

其他

  • 添加 lzma/xz 压缩支持

  • 尝试分割不可分割的压缩类型(如 gzip 或 bz2)时发出警告

  • 改进单机 shuffle 操作的哈希计算

  • 为 start 状态添加新的回调方法

  • 通用性能调优

0.8.1 / 2016-03-11

数组

  • 修复了范围切片中可能定期导致错误结果的错误。

  • 改进了 arg 归约(argminargmax 等)的支持和弹性

Bag

  • 添加 zip 函数

DataFrame

  • 添加 corrcov 函数

  • 添加 melt 函数

  • bcolz 和 hdf5 的 I/O 错误修复

0.8.0 / 2016-02-20

数组

  • 将默认数组归约分割从 32 更改为 4

  • 线性代数,triltriuLUinvcholeskysolvesolve_triangulareyelstsqdiagcorrcoef

Bag

  • 添加树状归约

  • 添加 range 函数

  • 移除 from_hdfs 函数(hdfs3 和 distributed 项目中现在提供了更好的功能)

DataFrame

  • 重构 dask.dataframe,使其包含一个完整的空 pandas dataframe 作为元数据。移除 Series 上的 .columns 属性

  • 添加 Series 分类访问器,series.nunique,移除 series 的 .columns 属性。

  • read_csv 修复(多列 parse_dates、整数列名等)

  • 改进图序列化的内部变更

其他

  • 文档更新

  • 为所有 collection 添加 from_imperative 和 to_imperative 函数

  • profiler 图表的美学更改

  • 将 dask 项目移至新的 dask 组织下

0.7.6 / 2016-01-05

数组

  • 改进线程安全

  • 树状归约

  • 添加 viewcompresshstackdstackvstack 方法

  • map_blocks 现在可以移除和添加维度

DataFrame

  • 改进线程安全

  • 扩展采样以包含替换选项

命令式

  • 移除融合结果的优化过程。

核心

  • 移除 dask.distributed

  • 提高了分块文件读取的性能

  • 序列化改进

  • 测试 Python 3.5

0.7.4 / 2015-10-23

这主要是一个错误修复版本。一些值得注意的更改

  • 修复与 numpy 1.10 和 pandas 0.17 发布相关的细微错误

  • 修复了随机数生成中的一个错误,该错误会导致由于生日悖论而产生重复块

  • dask.dataframe.read_hdf 中默认使用锁,以避免并发问题

  • dask.get 默认指向 dask.async.get_sync

  • 允许可视化函数接受通用的 graphviz 图选项,如 rankdir=’LR’

  • 将 reshape 和 ravel 添加到 dask.array

  • 支持从 dask.imperative 对象创建 dask.arrays

弃用

此版本还包含对 dask.distributed 的弃用警告,该模块将在下一版本中移除。

dask 分布式计算的未来开发正在这里进行:https://distributed.dask.org.cn 。非常欢迎社区对此项目提出反馈。

0.7.3 / 2015-09-25

诊断

  • 一个用于分析内存和 CPU 使用的实用工具已添加到 dask.diagnostics 模块中。

DataFrame

此版本改进了对 pandas API 的覆盖。其中包括 nuniquenlargestquantile 等功能。修复了读取非 ascii csv 文件时的编码问题。改进了 resample 的性能并修复了错误。read_hdf 支持更灵活的 globbing。还有更多改进。修复了 dask.imperativedask.bag 中的各种错误。

0.7.0 / 2015-08-15

DataFrame

此版本包含了重要的错误修复,并与 Pandas API 对齐。这得益于实际使用以及 Pandas 核心开发者的近期参与。

  • 新操作:query, rolling operations, drop

  • 改进的操作:quantiles, 对整个 dataframes 进行算术运算, dropna, 构造函数逻辑, merge/join, 逐元素操作, groupby 聚合

Bag

  • 修复了 fold 中使用 null 默认参数时的错误

数组

  • 新操作:da.fft 模块, da.image.imread

基础设施

  • array 和 dataframe collection 创建的图具有确定性键。这些键通常较长(哈希字符串),但在不同计算之间应该是一致的。这在将来对于缓存很有用。

  • 所有 collection(Array, Bag, DataFrame)都继承自共同的子类

0.6.1 / 2015-07-23

分布式

  • 改进了(尽管尚未足够)当 worker 死亡时 dask.distributed 的弹性

DataFrame

  • 改进了写入各种格式的功能,包括 to_hdf, to_castra, 和 to_csv

  • 改进了从 dask Arrays 和 Bags 创建 dask DataFrames 的功能

  • 改进了对 categoricals 和各种其他方法的支持

数组

  • 各种错误修复

  • Histogram 函数

调度

  • 在并行工作负载中添加了任务的打破平局排序,以便更好地处理和清除中间结果

其他

  • 添加了 dask.do 函数,用于使用普通 python 代码显式构造图

  • 将 pydot 替换为 graphviz 库用于图打印,以支持 Python3

  • 还有一个 gitter 聊天室和一个 stackoverflow 标签

© Copyright 2014-2018, Anaconda, Inc. 和贡献者。