目录

更新日志

目录

更新日志

注意

这不是详尽列表。有关变更的详尽列表,请参阅 git log。

2025.5.0

亮点

其他变更

2025.4.1

亮点

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

更多详情请参阅 dask#11906, dask#11898, dask#11903, 和 dask#11904,作者:Florian Jetter

其他变更

2025.4.0

亮点

  • 计算多个由 Dask-Expr 支持的集合(如 DataFrame)时,现在会一起进行优化,而不是单独优化。

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

  • DataFrame.shuffle 新增关键字参数 force,指示优化器在优化过程中不要移除 shuffle。

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

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

破坏性变更

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

  • 顶层 dask.optimize 现在总是会触发图的具现化。以前并非总是如此。这也导致任何低级别 HLG 注释被丢弃。

  • DataFrameArray 的计算结果现在总是在集群上进行拼接。以前,其行为取决于调用 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

亮点

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

更多详情请参阅 distributed#8991,作者:Hendrik Makait

其他变更

2025.1.0

亮点

移除了旧版 Dask DataFrame 实现

此版本移除了旧版 Dask DataFrame 实现。现在唯一可用的 Dask DataFrame 实现是带有查询规划的 API。

这强制废弃了以下配置

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,作者:Hendrik Makait

其他变更

2024.12.0

亮点

支持 Python 3.13

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

更多详情请参阅来自 Patrick HoeflerJames Bourbeaudask#11456distributed#8904

其他变更

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 上出现大的减速,并且每个分块的运行时可能超过 200 秒。

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

Xarray rolling-construct 中一致的分块大小

使用 Dask Array 的 Xarray 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 倍。这给调度器带来了很大压力。

爱因斯坦求和的一致分块大小

如果应用于多个 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 标记化不使用缓慢的 pickle 路径 (dask#11419)

其他变更

2024.9.1

亮点

提高了自适应缩放的弹性

自适应缩放集群现在可以从缩放过程中的伪错误中恢复。

更多详情请参阅 distributed#8871,作者是 Hendrik Makait

其他变更

2024.9.0

亮点

Bokeh 最低版本升级到 3.1.0

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

更多详情请参阅来自 James Bourbeaudask#11375distributed#8861

引入新的 Task 类

添加 Task 类以取代元组作为任务规范。

更多详情请参阅来自 Florian Jetterdask#11248

其他变更

2024.8.2

亮点

自动选择 rechunking 方法

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

具体来说,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")

更多详情请参阅来自 Hendrik Makaitdask#11337

Dask Arrays 的新 shuffle API

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

更多详情请参阅来自 Patrick Hoeflerdask#11267dask#11311dask#11326

Dask Arrays 的新 blockwise_reshape API

新的 blockwise_reshape() 为不关心底层数组顺序的情况提供了易于并行化的重塑操作。它易于并行化,并且不再触发底层的 rechunking 操作。这在你对结果 Array 的顺序不关心时非常有用,例如当对数组应用 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 Array 通常会创建非常复杂的计算,中间伴随 rechunk 操作,因为 Dask 默认尊重 Array 的 C 顺序。这确保了结果 Dask Array 的顺序与相应的 NumPy Array 相同。然而,这可能导致计算效率非常低。blockwise_reshape 在不关心顺序的情况下比默认实现效率高得多。

警告

分块重塑操作比默认操作更高效,但它们会返回一个排序方式不同的数组。请谨慎使用!

更多详情请参阅来自 Patrick Hoeflerdask#11328

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

以前使用 vindex() 对 Dask Array 进行索引会在被索引的维度上创建一个单一输出分块。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

更多详情请参阅来自 Patrick Hoeflerdask#11330

其他变更

2024.8.1

亮点

改进重塑 Dask Arrays 的输出分块大小

重塑 Dask Array 通常会将要重塑的维度压缩到一个分块中。这导致输出分块非常大,并随后引起许多内存不足错误和性能问题。

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 模式的调度效率

调度器以前为使用 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 所需的最低版本。

更多详情请参阅来自 Patrick Hoeflerdask#11245distributed#8793

其他变更

2024.8.0

亮点

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

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

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

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

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

更多详情和性能基准测试请参阅来自 Patrick Hoeflerdask#11262dask#11267

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

调度器以前为 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.

操作本身易于并行化。使用适当的执行策略,调度器现在可以以恒定内存执行操作,避免溢出并允许我们扩展到更大的数据集。

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

更多详情和示例请参阅来自 Patrick Hoeflerdistributed#8818

其他变更

2024.7.1

亮点

更具弹性的分布式锁

distributed.Lock 现在可以抵御 worker 故障。以前,在持有锁的 worker 丢失或/因错误未能释放锁的情况下,可能发生死锁。

更多详情请参阅来自 Florian Jetterdistributed#8770

其他变更

2024.7.0

主要亮点

停止支持 pandas 1.x

此版本停止支持 pandas<2。现在运行 Dask DataFrame 需要 pandas 2.0 或更高版本。

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

更多详细信息请参阅由 Patrick Hoefler 提交的 dask#11199

发布-订阅 API 已弃用

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

更多详细信息请参阅由 Hendrik Makait 提交的 distributed#8724

其他变更

2024.6.2

这是一个补丁版本,用于更新 2024.6.1 版本中 daskdistributed 版本限定的问题。

其他变更

2024.6.1

主要亮点

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

更多详细信息请参阅由 Hendrik Makait 提交的 distributed#8703

其他变更

2024.6.0

主要亮点

memmap 数组 tokenization

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

更多详细信息请参阅由 Florian Jetter 提交的 dask#11161

其他变更

2024.5.2

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

其他变更

2024.5.1

主要亮点

支持 NumPy 2.0

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

更多详细信息请参阅由 Benjamin Zaitlen 提交的 dask#11096 和由 James Bourbeau 提交的 dask#11106

增加对 Zarr 存储的支持

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

更多详细信息请参阅由 Greg M. Fleishman 提交的 dask#10422

其他变更

2024.5.0

主要亮点

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

其他变更

2024.4.2

主要亮点

Trivial Merge 实现

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

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

查询优化器将识别出 result 之前也在 "a" 上进行了 shuffle,因此在进行块合并之前,只会在第二次 merge 操作中对 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 时出现的错误。

详细信息请参阅由 Richard (Rick) Zamora 提交的 dask#11035dask#11039

其他变更

2024.4.0

主要亮点

Query planning 修复

此版本包含 Dask DataFrame 新的 query planner 中的各种错误修复。

GPU 指标仪表板修复

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

详细信息请参阅由 Benjamin Zaitlen 提交的 distributed#8572

其他变更

2024.3.1

这是一个次要版本,主要是在升级时,如果未安装 dask-expr,则将异常降级为警告。

其他变更

2024.3.0

发布于 2024 年 3 月 11 日

主要亮点

Query planning

此版本为 dask.dataframe 的所有用户默认启用 query planning。

query planning 功能代表了使用 dask-exprDataFrame 的重写。这是一个即插即用的替代方案,我们预计大多数用户无需调整任何代码。任何反馈都可以在 Dask 的 issue trackerquery planning feedback issue 上报告。

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

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

停止支持 Pandas 1.X

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

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

其他变更

2024.2.1

发布于 2024 年 2 月 23 日

主要亮点

允许静默 dask.DataFrame 弃用警告

上一个版本包含一个 DeprecationWarning,用于提醒用户 dask.dataframe 即将切换到支持 query planning 的新后端(另请参阅 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

详细信息请参阅由 Miles 提交的 dask#10936dask#10925

更健壮的分布式调度器,用于处理罕见的键冲突

Blockwise fusion 优化可能导致任务键冲突,分布式调度器未能正确处理此问题(参见 dask#9888)。用户通常会看到各种内部异常,导致系统死锁或严重故障。虽然此问题未能完全修复,但调度器现在实现了一种机制,可以缓解大多数情况,并在检测到问题时发出警告。

详细信息请参阅由 crusaderkyFlorian Jetter 提交的 distributed#8185

在此过程中,对 tokenization 进行了各种改进。更多详细信息请参阅由 crusaderky 提交的 dask#10913dask#10884dask#10919dask#10896 以及主要是 dask#10883

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

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

更多详细信息请参阅由 crusaderky 提交的 distributed#8522

其他变更
  • 移除 flaky 的 fastparquet 测试 (dask#10948) Patrick Hoefler

  • 在 dask-expr 中启用 Aggregation (dask#10947) Patrick Hoefler

  • 更新 dask-expr 中 assign 更改的测试 (dask#10944) Patrick Hoefler

  • 根据 pandas large string 更改进行调整 (dask#10942) Patrick Hoefler

  • 修复 flaky 的 test_describe_empty 测试 (dask#10943) crusaderky

  • 使用 Python 3.12 作为参考环境 (dask#10939) crusaderky

  • [外观] 清理 test_config.py 中的临时路径 (dask#10938) crusaderky

  • [命令行] dask config setdask config find 更新。(dask#10930) Miles

  • 当分块充满 NaNs 时 combine_first 的行为。(dask#10932) crusaderky

  • 正确解析来自命令行的小写 true/false 配置。(dask#10926) crusaderky

  • 修复打印 None 值时的 dask config get 命令。(dask#10927) crusaderky

  • query-planning 不能是 None。(dask#10928) crusaderky

  • 添加 dask config set 命令。(dask#10921) Miles

  • 再次加速 nunique。(dask#10922) Patrick Hoefler

  • 清理一些 Cython 警告处理。(dask#10924) crusaderky

  • 将 pre-commit/action 从 3.0.0 升级到 3.0.1。(dask#10920)

  • 当提供给 P2P shuffle 的元数据 (meta) 不正确时,引发错误并避免数据丢失。(distributed#8520) Florian Jetter

  • 修复 gpuci: np.product 已被弃用。(distributed#8518) crusaderky

  • 将 gpuCI RAPIDS_VER 更新到 24.04。(distributed#8471)

  • 在 Python 3.12 上解除固定 ipywidgets。(distributed#8516) crusaderky

  • 在 run_spec 冲突时保留旧依赖。(distributed#8512) crusaderky

  • 微小的 mypy 修复。(distributed#8513) crusaderky

  • 确保大型负载可以被序列化并通过通讯 (comms) 发送。(distributed#8507) Florian Jetter

  • 允许配置大型图警告阈值。(distributed#8508) Florian Jetter

  • 与 Tokenization 相关的测试调整 (从 #8185 回移)。(distributed#8499) crusaderky

  • update_graph 的调整 (从 #8185 回移)。(distributed#8498) crusaderky

  • AMM: 测试增量淘汰。(distributed#8501) crusaderky

  • 在 CI 中抑制 dask-expr 警告。(distributed#8505) crusaderky

  • 在 CI 中忽略 dask-expr 警告。(distributed#8504) James Bourbeau

  • 改进 P2P 稳定排序的测试。(distributed#8458) Hendrik Makait

  • 将 pre-commit/action 从 3.0.0 升级到 3.0.1。(distributed#8503)

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#10912Patrick Hoefler 提交。

改进的 Tokenization

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

详情见 dask#10898dask#10904dask#10876dask#10874dask#10865crusaderky 提交。

其他变更
  • 修复字符串转换时对只读数组进行原地修改的问题。(dask#10886) Patrick Hoefler

  • dask-expr 添加更新日志条目。(dask#10915) Patrick Hoefler

  • 修复 cudfleftsemi 合并。(dask#10914) Patrick Hoefler

  • dask-expr 警告进行细微更新。(dask#10916) James Bourbeau

  • 提高 groupby.nunique 的性能。(dask#10910) Patrick Hoefler

  • dask-expr 中为 leftsemi 合并添加配置。(dask#10908) Patrick Hoefler

  • 调整 dask-expr 的 assign 测试。(dask#10907) Patrick Hoefler

  • 避免在 GPU CI 中 test_to_datetime 使用 pytest.warns。(dask#10902) Richard (Rick) Zamora

  • 更新文档首页的部署选项。(dask#10901) James Bourbeau

  • 修复 dataframe 文档中的拼写错误。(dask#10900) Matthew Rocklin

  • 将 peter-evans/create-pull-request 从 5 升级到 6。(dask#10894)

  • 修复 mimesis API >=13.1.0 - 使用 random.randint。(dask#10888) Miles

  • 调整无效测试。(dask#10897) Patrick Hoefler

  • 序列化 da.argwhereda.count_nonzero。(dask#10885) crusaderky

  • 修复 singleton pr 后 dask-expr 的测试。(dask#10892) Patrick Hoefler

  • s3fs 设置最低版本限制。(dask#10889) Miles

  • 为新的 parquet 缓存添加一些 dask-expr 修复。(dask#10880) Florian Jetter

  • 更新部署文档。(dask#10882) Matthew Rocklin

  • 开始构建 dask-expr 文档。(dask#10879) Patrick Hoefler

  • 测试静态方法和类方法的 tokenization。(dask#10872) crusaderky

  • distributed.printdistributed.warn 添加到 API 文档。(dask#10878) James Bourbeau

  • 在 M1 架构上运行 macos ci。(dask#10877) Patrick Hoefler

  • 更新 dask-expr 的测试。(dask#10838) Patrick Hoefler

  • 更新 parquet 测试以与 dask-expr 修复对齐。(dask#10851) Richard (Rick) Zamora

  • 修复 test_graph_manipulation 中的回归。(dask#10873) crusaderky

  • 调整 dask-expr ci 的 pytest 错误。(dask#10871) Patrick Hoefler

  • pandas<2.1 时,为 numba 设置最高版本限制。(dask#10890) Miles

  • 弃用 DataFrame.fillna 中的 method 参数。(dask#10846) Miles

  • pyproject.toml 中删除警告过滤器。(dask#10867) Patrick Hoefler

  • 跳过 fastparquet 的 test_append_with_partition。(dask#10828) Patrick Hoefler

  • 修复 pytest 8 的问题。(dask#10868) Patrick Hoefler

  • 调整 dask-expr 中支持 Groupby.aggregate 使用 median 的测试 (2/2)。(dask#10870) Hendrik Makait

  • 允许 sort_values 中 ascending 的长度大于一。(dask#10864) Florian Jetter

  • 允许在 Python 3.9 中引发其他消息。(dask#10862) Hendrik Makait

  • 在病态情况下获取计算代码时不要崩溃。(distributed#8502) James Bourbeau

  • 将 peter-evans/create-pull-request 从 5 升级到 6。(distributed#8494)

  • 修复 cudf 溢出指标的测试。(distributed#8478) Mads R. B. Kristensen

  • 升级到 pytest 8。(distributed#8482) crusaderky

  • 修复 test_two_consecutive_clients_share_results。(distributed#8484) crusaderky

  • 客户端单词混淆。(distributed#8481) templiert

2024.1.1

发布于 2024 年 1 月 26 日

亮点

支持 Pandas 2.2 和 Scipy 1.12

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

详情见 dask#10834dask#10849dask#10845distributed#8474crusaderky 提交。

弃用项

  • 弃用 apply 中的 convert_dtype。(dask#10827) Miles

  • 弃用 DataFrame.rolling 中的 axis。(dask#10803) Miles

  • 在大多数 DataFrame 方法中弃用 out=dtype= 参数。(dask#10800) crusaderky

  • 弃用 groupby 累积转换器中的 axis。(dask#10796) Miles

  • 在剩余方法中将 shuffle 重命名为 shuffle_method。(dask#10797) Miles

其他变更
  • 将推荐的部署选项添加到部署文档。(dask#10866) James Bourbeau

  • 改进 _agg_finalize 以符合输出预期。(dask#10835) Hendrik Makait

  • 为 hlg 实现确定性 tokenization。(dask#10817) Patrick Hoefler

  • 重构:将 tokenize() 的测试移至其自己的模块。(dask#10863) crusaderky

  • 更新 DataFrame 示例部分。(dask#10856) James Bourbeau

  • 暂时将 mimesis 固定在 <13.1.0。(dask#10860) James Bourbeau

  • _testing.py 进行微小的代码风格调整。(dask#10857) crusaderky

  • 解除跳过并调整使用 dask-exprgroupby-aggregate 测试,以包含 median。(dask#10832) Hendrik Makait

  • 修复上游 CI 中 sizeof(pd.MultiIndex) 的测试。(dask#10850) crusaderky

  • numpy 2.0: 修复通过 uint64 数组切片的问题。(dask#10854) crusaderky

  • 重命名 numpy 版本常量以匹配 pandas。(dask#10843) crusaderky

  • 将 actions/cache 从 3 升级到 4。(dask#10852)

  • 将 gpuCI RAPIDS_VER 更新到 24.04。(dask#10841)

  • 修复 doctest 中的弃用。(dask#10844) crusaderky

  • numpy 2.x: 改变 dtype 算术。(dask#10831) crusaderky

  • 调整 dask-expr 中支持 median 的测试。(dask#10839) Patrick Hoefler

  • 调整 dask-expr 中支持 groupby-aggregate 使用 median 的测试。(dask#10840) Hendrik Makait

  • numpy 2.x: 修复 MaskedArray 的 std()。(dask#10837) crusaderky

  • 如果测试失败,则使 dask-expr ci 失败。(dask#10829) Patrick Hoefler

  • 导出测试时激活 query_planning。(dask#10833) Patrick Hoefler

  • 暴露 dataframe 测试。(dask#10830) Patrick Hoefler

  • numpy 2: n 维 fft 函数中的弃用。(dask#10821) crusaderky

  • 通用化 dask-exprCreationDispatch。(dask#10794) Richard (Rick) Zamora

  • 启用 dask-expr 时移除循环导入。(dask#10824) Miles

  • 微小 [CI]:publish-test-results 未标记为失败。(dask#10825) Miles

  • 修复更多测试以使用 pytest.warns()。(dask#10818) Michał Górny

  • np.unique(): 在 numpy 2 中,inverse 具有形状。(dask#10819) crusaderky

  • test_split_adaptive_files 限制为 pyarrow 引擎。(dask#10820) Patrick Hoefler

  • 调整 dask/dask 中剩余的测试。(dask#10813) Patrick Hoefler

  • 将测试仅限于 Arrow。(dask#10814) Patrick Hoefler

  • 过滤 std 测试的警告。(dask#10815) Patrick Hoefler

  • 主要调整索引测试。(dask#10790) Patrick Hoefler

  • 更新部署文档。(dask#10778) Sarah Charlotte Johnson

  • 解除文档构建的阻塞。(dask#10807) Miles

  • 调整 test_to_datetime 以兼容 dask-expr。(dask#10805) Hendrik Makait

  • 上游 CI 调整。(dask#10806) crusaderky

  • 改进 to_numeric 的测试。(dask#10804) Hendrik Makait

  • 修复测试报告缓存键缩进。(dask#10798) Miles

  • 添加测试报告工作流。(dask#10783) Miles

  • 处理矩阵子类序列化。(distributed#8480) Florian Jetter

  • 在 P2P 中为分区列使用最小数据类型。(distributed#8479) Florian Jetter

  • pandas 2.2: 修复 test_dataframe_groupby_tasks。(distributed#8475) crusaderky

  • 将 actions/cache 从 3 升级到 4。(distributed#8477)

  • pandas 2.2 对比 pyarrow 14: 弃用的 DatetimeTZBlock。(distributed#8476) crusaderky

  • pandas 2.2.0: 弃用频率别名 M,推荐使用 ME。(distributed#8473) Hendrik Makait

  • 修复文档构建。(distributed#8472) Hendrik Makait

  • 修复带有显式 npartitions 的基于 P2P 的连接。(distributed#8470) Hendrik Makait

  • test_report.py 脚本中忽略 dask-expr。(distributed#8464) Miles

  • 微调:在测试报告环境中硬编码 Python 版本。(distributed#8462) crusaderky

  • 更改 test_report.py - 在 dask/dask 仓库中跳过不良 artifact。(distributed#8461) Miles

  • 替换所有 sys.is_finalizing 的出现。(distributed#8449) Florian Jetter

2024.1.0

发布于 2024 年 1 月 12 日

亮点

P2P 内的部分 rechunk

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

详情见 distributed#8330Hendrik Makait 提交。

Fastparquet 引擎已弃用

已弃用 fastparquet Parquet 引擎。用户应通过 安装 PyArrow 并移除 read_parquetto_parquet 调用中的 engine="fastparquet" 来迁移到 pyarrow 引擎。

详情见 dask#10743crusaderky 提交。

改进了任意数据的序列化

此版本改进了对任意数据的序列化鲁棒性。以前在某些情况下,非 msgpack 可序列化数据会导致序列化失败。在这些情况下,我们现在回退到使用 pickle

详情见 dask#8447Hendrik Makait 提交。

其他弃用项

  • 在 DataFrame 方法中弃用 shuffle 关键字,推荐使用 shuffle_method。(dask#10738) Hendrik Makait

  • 弃用 repartition 中的自动参数推断。(dask#10691) Patrick Hoefler

  • 弃用 set_index 中的 compute 参数。(dask#10784) Miles

  • 弃用 eval 中的 inplace。(dask#10785) Miles

  • 弃用 Series.view。(dask#10754) Miles

  • 弃用 set_indexsort_valuesnpartitions="auto"。(dask#10750) Miles

其他变更
  • 避免任务 shuffle 中导致数据丢失的快捷方式。(dask#10763) Patrick Hoefler

  • 排序时忽略数据任务。(dask#10706) Florian Jetter

  • dask-expr 添加 get_dummies。(dask#10791) Patrick Hoefler

  • 调整 IO 测试以适应 dask-expr 迁移。(dask#10776) Patrick Hoefler

  • 移除关于 groupbysortsplit_out 的弃用警告。(dask#10788) Patrick Hoefler

  • 处理 pandas 弃用。(dask#10789) Patrick Hoefler

  • get_scheduler 中只导入一次 distributed。(dask#10771) Florian Jetter

  • 简化 GitHub Actions。(dask#10781) crusaderky

  • 添加单元测试概述。(dask#10769) Miles

  • 清理 CI 中冗余的部分。(dask#10768) crusaderky

  • 更新 ufunc 的测试。(dask#10773) Patrick Hoefler

  • 使用 pytest.mark.skipif(DASK_EXPR_ENABLED)。(dask#10774) crusaderky

  • 调整 dask-expr 的 shuffle 测试。(dask#10759) Patrick Hoefler

  • 修复一些来自 pandas 的弃用警告。(dask#10749) Patrick Hoefler

  • 调整 dask-expr 的 shuffle 测试。(dask#10762) Patrick Hoefler

  • 更新 pre-commit。(dask#10767) Hendrik Makait

  • 清理 CI 中的配置切换。(dask#10766) crusaderky

  • 改进 validate_key 的异常信息。(dask#10765) Hendrik Makait

  • 处理 set_index 中带有未知分区的 datetimeindexes。(dask#10757) Patrick Hoefler

  • 添加小数的哈希处理。(dask#10758) Patrick Hoefler

  • 检查 is_monotonic 的测试。(dask#10756) crusaderky

  • 更改 value_counts_aggregate 中的参数顺序。(dask#10751) Patrick Hoefler

  • 调整一些 groupby 测试以兼容 dask-expr。(dask#10752) Patrick Hoefler

  • 对于 3.9 构建,将 mimesis 限制在 < 12。(dask#10755) Patrick Hoefler

  • 不要在跳过条件中评估配置。(dask#10753) Patrick Hoefler

  • 调整一些测试以与 dask-expr 兼容。(dask#10714) Patrick Hoefler

  • 使 dask.array.utils 函数更通用,以适用于其他 Dask Array。(dask#10676) Matthew Rocklin

  • 移除重复的“单机”部分。(dask#10747) Matthew Rocklin

  • 微调 ORC engine= 参数。(dask#10746) crusaderky

  • 添加 pandas 3.0 弃用项和为 dask-expr 准备迁移。(dask#10723) Miles

  • 在文档首页添加任务图动画。(dask#10730) Sarah Charlotte Johnson

  • 使用新的 Xarray logo。(dask#10729) James Bourbeau

  • 更新“Dask 十分种入门”页面的 tab 样式。(dask#10728) James Bourbeau

  • 更新 CI 中的环境文件上传步骤。(dask#10726) James Bourbeau

  • 如果 split_out>1,不要在 GroupBy.nunique 中复制未观察到的类别。(dask#10716) Patrick Hoefler

  • dask.order 更新的更新日志条目。(dask#10715) Florian Jetter

  • _check_dsk 中放宽冗余键检查。(dask#10701) Richard (Rick) Zamora

  • 修复 test_report.py。(distributed#8459) Miles

  • 回滚 pickle 更改。(distributed#8456) Florian Jetter

  • 调整 test_report.py 以支持 dask/dask 仓库。(distributed#8450) Miles

  • 为 P2P shuffling 保持稳定排序。(distributed#8453) Hendrik Makait

  • 为 scheduler 添加无 worker 超时。(distributed#8371) FTang21

  • 允许维护者手动调度测试工作流。(distributed#8445) Erik Sundell

  • 将 scheduler 相关的转换功能设为私有。(distributed#8448) Hendrik Makait

  • 更新 pre-commit hooks。(distributed#8444) Hendrik Makait

  • pickle 时不要总是检查 __main__ in result。(distributed#8443) Florian Jetter

  • 仅当实现时才将 wait_for_workers 委托给集群实例。(distributed#8441) Erik Sundell

  • 延长 test_pandas 中的睡眠时间。(distributed#8440) Julian Gilbey

  • 避免使用已弃用的 shuffle 关键字。(distributed#8439) Hendrik Makait

  • Shuffle 指标 4/4: 移除定制诊断。(distributed#8367) crusaderky

  • 不在 testsuite 中运行 gilknocker。(distributed#8423) Florian Jetter

  • 微调 abstractmethods。(distributed#8427) crusaderky

  • Shuffle 指标 3/4: 捕获后台指标。(distributed#8366) crusaderky

  • Shuffle 指标 2/4: 添加后台指标。(distributed#8365) crusaderky

  • Shuffle 指标 1/4: 添加前台指标。(distributed#8364) crusaderky

  • 将 actions/upload-artifact 从 3 升级到 4。(distributed#8420)

  • 修复 test_merge_p2p_shuffle_reused_dataframe_with_different_parameters。(distributed#8422) Hendrik Makait

  • 扩展 Client.upload_file 文档示例。(distributed#8313) Miles

  • 改进 P2P scheduler 插件中的日志记录。(distributed#8410) Hendrik Makait

  • 重新启用 test_decide_worker_coschedule_order_neighbors。(distributed#8402) Florian Jetter

  • 将 cuDF 溢出统计信息添加到 RMM/GPU 内存图中。(distributed#8148) Charles Blackmon-Luca

  • 修复 Nanny 生成的 worker 的哈希不一致问题。(distributed#8400) Charles Stern

  • 如果 worker 正在运行长时间任务 (例如 worker_client),则不允许它们缩减。(distributed#7481) Florian Jetter

  • 修复 flaky test_subprocess_cluster_does_not_depend_on_logging。(distributed#8417) crusaderky

2023.12.1

发布于 2023 年 12 月 15 日

亮点

Dask DataFrames 现在支持逻辑查询规划

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

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

您还需要安装 dask-expr

pip install dask-expr

到目前为止,我们看到了有希望的性能改进,详情请参阅这篇博客文章这些定期更新的基准测试。关于查询优化器工作原理的更详细解释,可以在这篇博客文章中找到。

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

详情见 dask#10634Patrick Hoefler 提交。

read_parquet 中的 Dtype 推断

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

详情见 dask#10698dask#10705Patrick Hoefler 提交。

调度改进以减少内存使用

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

此版本的更新修复了 2023.10.0 版本中引入的一些性能回归 (参见 dask#10535)。通常,现在计算应该更倾向于在不再需要时尽快释放内存中的数据。

详情见 dask#10660dask#10697Florian Jetter 提交。

改进了基于 P2P 的合并的鲁棒性和性能

此版本包含多项更新,修复了 2023.9.2 中引入的潜在死锁,并提高了集群动态扩展时基于 P2P 的合并的鲁棒性。

详情见 distributed#8415distributed#8416distributed#8414Hendrik Makait 提交。

移除了禁用 pickle 选项

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

详情见 distributed#8401Florian Jetter 提交。

其他变更
  • 为近期 P2P 合并修复添加更新日志条目。(dask#10712) Hendrik Makait

  • 更新 DataFrame 页面。(dask#10710) Matthew Rocklin

  • dask-expr 切换添加更新日志条目。(dask#10704) Patrick Hoefler

  • 改进 PipInstall 更改的更新日志条目。(dask#10711) Hendrik Makait

  • 移除 PR labeler。(dask#10709) James Bourbeau

  • Delayed 对象添加 .__wrapped__。(dask#10695) Andrew S. Rosen

  • 将 actions/labeler 从 4.3.0 升级到 5.0.0。(dask#10689)

  • 将 actions/stale 从 8 升级到 9。(dask#10690)

  • [Dask.order] 从排序中移除不可运行的叶节点。(dask#10697) Florian Jetter

  • 更新安装文档。(dask#10699) Matthew Rocklin

  • 修复文档中的软件环境链接。(dask#10700) James Bourbeau

  • 避免为 read_parquet 将非字符串转换为 arrow 字符串。(dask#10692) Patrick Hoefler

  • 将 xarray-contrib/issue-from-pytest-log 从 1.2.7 升级到 1.2.8。(dask#10687)

  • 修复 pd.DateOffsettokenize。(dask#10664) jochenott

  • 写入空数组到 zarr 的 Bugfix。(dask#10506) Ben

  • 文档更新,样式调整,提及 free。(dask#10679) Matthew Rocklin

  • 更新部署文档。(dask#10680) Matthew Rocklin

  • 使用关键路径方法重写 Dask.order。(dask#10660) Florian Jetter

  • 避免替换多次出现的键。(dask#10646) Florian Jetter

  • 在文档中添加缺失的图片。(dask#10694) Matthew Rocklin

  • 将 actions/setup-python 从 4 升级到 5。(dask#10688)

  • 更新着陆页。(dask#10674) Matthew Rocklin

  • 简化 dispatch 中的 meta 检查。(dask#10638) Patrick Hoefler

  • 固定 PR Labeler。(dask#10675) Matthew Rocklin

  • 稍微重组文档索引。(dask#10669) Matthew Rocklin

  • 将 actions/setup-java 从 3 升级到 4。(dask#10667)

  • 将 conda-incubator/setup-miniconda 从 2.2.0 升级到 3.0.1。(dask#10668)

  • 将 xarray-contrib/issue-from-pytest-log 从 1.2.6 升级到 1.2.7。(dask#10666)

  • 修复使用 nightly pyarrow 时的 test_categorize_info。(dask#10662) James Bourbeau

  • 重写 test_subprocess_cluster_does_not_depend_on_logging。(distributed#8409) Hendrik Makait

  • 在使用 tblib=3 时,避免在 SpillBuffer 中 pickle 键失败时出现 RecursionError。(distributed#8404) Hendrik Makait

  • 允许任务覆盖 is_rootish 启发式算法。(distributed#8412) Hendrik Makait

  • 移除 GPU 执行器。(distributed#8399) Hendrik Makait

  • subprocess cluster 不依赖日志记录。(distributed#8398) Hendrik Makait

  • 将 gpuCI RAPIDS_VER 更新到 24.02。(distributed#8384)

  • 将 actions/setup-python 从 4 升级到 5。(distributed#8396)

  • 确保 P2P rechunking 中的输出分块均匀分布。(distributed#8207) Florian Jetter

  • 微小:修复拼写错误。(distributed#8395) crusaderky

  • 将 JamesIves/github-pages-deploy-action 从 4.4.3 升级到 4.5.0。(distributed#8387)

  • 将 conda-incubator/setup-miniconda 从 3.0.0 升级到 3.0.1。(distributed#8388)

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#8374distributed#8357distributed#8343Hendrik Makait 提交。

Bokeh 3.3.0 兼容性

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

详情见 distributed#8347distributed#8381Jacob Tomlinson 提交。

其他变更

2023.11.0

发布于 2023 年 11 月 10 日

亮点

零拷贝 P2P 数组 Rechunking

使用内存中 P2P 数组 rechunking 时,用户应能看到显著的性能提升。这是因为不再复制底层数据缓冲区。

下面是一个简单的示例,我们比较了不同 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.

详情请参阅来自 crusaderkydistributed#8282distributed#8318distributed#8321 以及来自 Hendrik Makait 的 (distributed#8322)。

弃用 PyArrow <14.0.1

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

详情请参阅来自 Florian Jetterdask#10622

改进的 PyArrow 文件系统用于 Parquet

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

详情请参阅来自 Richard (Rick) Zamoradask#10590

改进 P2P Shuffle 中的类型协调

详情请参阅来自 Hendrik Makaitdistributed#8332

其他变更

2023.10.1

发布于 2023 年 10 月 27 日

亮点

Python 3.12

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

详情请参阅来自 Thomas Graingerdask#10544distributed#8223

其他变更

2023.10.0

发布于 2023 年 10 月 13 日

亮点

降低多数组规约的内存压力

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

详情请参阅来自 Florian Jetterdask#10535

改进 P2P Shuffle 的鲁棒性

有几项更新(如下所列)使得 P2P shuffle 更具鲁棒性,并且更不容易失败。

详情请参阅来自 Hendrik Makaitdistributed#8262distributed#8264distributed#8242distributed#8244distributed#8235,以及来自 Charles Blackmon-Lucadistributed#8124

降低大型图的调度器 CPU 负载

计算大型任务图时,用户应能看到调度器上的 CPU 负载降低。

详情请参阅来自 Florian Jetterdistributed#8238dask#10547,以及来自 crusaderkydistributed#8240

其他变更

2023.9.3

发布于 2023 年 9 月 29 日

亮点

恢复先前的配置覆盖行为

2023.9.2 版本在 dask.config.get 中使用 override_with= 关键字覆盖配置选项时引入了一个无意中破坏性更改(参见 dask#10519)。此版本恢复了先前的行为。

详情请参阅来自 crusaderkydask#10521

Dask Array 规约中的复杂 dtypes

此版本改进了对 Dask Array 中常见规约(例如 varstdmoment)使用复杂 dtypes 的支持。

详情请参阅来自 wkrasnickidask#10009

其他变更

2023.9.2

发布于 2023 年 9 月 15 日

亮点

如果安装了过时的 PyArrow,P2P shuffle 现在会引发错误

以前,如果安装了旧版本的 pyarrow,默认的 shuffle 方法会静默回退到基于任务的 shuffle。现在,我们不再静默回退,而是引发一个信息性错误,指明 P2P 所需的最小 pyarrow 版本。

详情请参阅来自 Hendrik Makaitdask#10496

admin.traceback.shorten 的弃用周期

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

详情请参阅来自 crusaderkydask#10509

其他变更

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 修复

  • 修复在追加模式下运行 to_csv 并将 single_file 设置为 True 时出现的 ValueError 问题 (dask#10441) Ben

维护

2023.8.0

发布于 2023 年 8 月 4 日

增强功能

文档

维护

2023.7.1

发布于 2023 年 7 月 20 日

注意

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

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

您可以通过将 dataframe.convert-string 配置值设置为 False 来禁用此更改

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 日

改进

Bug 修复

文档

维护

2023.1.1

发布于 2023 年 1 月 27 日

改进

Bug 修复

文档

维护

2023.1.0

发布于 2023 年 1 月 13 日

改进

文档

维护

2022.12.1

发布于 2022 年 12 月 16 日

改进

Bug 修复

文档

维护

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 日

功能增强

错误修复

文档

维护

2022.7.0

发布于 2022 年 7 月 8 日

功能增强

错误修复

文档

维护

2022.6.1

发布于 2022 年 6 月 24 日

功能增强

错误修复

弃用

文档

维护

2022.6.0

发布于 2022 年 6 月 10 日

功能增强

错误修复

文档

维护

2022.05.2

发布于 2022 年 5 月 26 日

功能增强

文档

维护

2022.05.1

发布于 2022 年 5 月 24 日

新功能

功能增强

错误修复

已弃用

文档

维护

2022.05.0

Released on May 2, 2022

亮点

这是针对 此问题 的错误修复版本。

文档

2022.04.2

Released on April 29, 2022

亮点

此版本包括对 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 以减小分区大小。

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

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

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

新特性

改进

错误修复

弃用

文档

维护

2022.04.1

Released on April 15, 2022

新特性

  • 添加缺失的 NumPy ufuncs: abs, left_shift, right_shift, positive。(dask#8920) Tom White

改进

错误修复

弃用

文档

维护

2022.04.0

Released on April 1, 2022

注意

这是第一个支持 Python 3.10 的版本

新特性

改进

错误修复

弃用

文档

维护

2022.03.0

Released on March 18, 2022

新特性

改进

错误修复

弃用

文档

维护

2022.02.1

Released on February 25, 2022

新特性

改进

错误修复

弃用

文档

维护

2022.02.0

Released on February 11, 2022

注意

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

新特性

改进

错误修复

弃用

文档

维护

2022.01.1

Released on January 28, 2022

新特性

改进

错误修复

弃用

文档

维护

2022.01.0

Released on January 14, 2022

新特性

改进

错误修复

弃用

文档

维护

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.datasetread_parquet API。

  • Dask 数组 SVD 的几处修复。

所有更改

2.30.0 / 2020-10-06

数组

2.29.0 / 2020-10-02

数组

Bag

核心

DataFrame

文档

2.28.0 / 2020-09-25

数组

核心

DataFrame

2.27.0 / 2020-09-18

数组

核心

DataFrame

文档

2.26.0 / 2020-09-11

数组

核心

DataFrame

文档

2.25.0 / 2020-08-28

核心

DataFrame

文档

2.24.0 / 2020-08-22

数组

DataFrame

核心

2.23.0 / 2020-08-14

数组

Bag

核心

DataFrame

文档

2.22.0 / 2020-07-31

数组

核心

DataFrame

文档

2.21.0 / 2020-07-17

数组

Bag

核心

DataFrame

文档

2.20.0 / 2020-07-02

数组

DataFrame

文档

2.19.0 / 2020-06-19

数组

核心

DataFrame

文档

2.18.1 / 2020-06-09

数组

核心

文档

2.18.0 / 2020-06-05

数组

Bag

DataFrame

文档

2.17.2 / 2020-05-28

核心

DataFrame

2.17.1 / 2020-05-28

数组

核心

DataFrame

2.17.0 / 2020-05-26

数组

Bag

核心

DataFrame

文档

2.16.0 / 2020-05-08

数组

核心

DataFrame

文档

2.15.0 / 2020-04-24

数组

核心

DataFrame

文档

2.14.0 / 2020-04-03

数组

核心

DataFrame

文档

2.13.0 / 2020-03-25

数组

Bag

核心

DataFrame

文档

2.12.0 / 2020-03-06

数组

核心

DataFrame

文档

2.11.0 / 2020-02-19

数组

Bag

核心

DataFrame

文档

2.10.1 / 2020-01-30

2.10.0 / 2020-01-28

2.9.2 / 2020-01-16

数组

核心

DataFrame

文档

2.9.1 / 2019-12-27

数组

核心

DataFrame

文档

2.9.0 / 2019-12-06

数组

核心

DataFrame

文档

2.8.1 / 2019-11-22

数组

核心

DataFrame

文档

2.8.0 / 2019-11-14

数组

Bag

核心

DataFrame

文档

2.7.0 / 2019-11-08

此版本取消对 Python 3.5 的支持

数组

核心

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

数组

核心

DataFrame

文档

2.2.0 / 2019-08-01

数组

核心

DataFrame

文档

2.1.0 / 2019-07-08

数组

核心

DataFrame

文档

2.0.0 / 2019-06-25

数组

核心

DataFrame

文档

1.2.2 / 2019-05-08

数组

核心

DataFrame

文档

1.2.1 / 2019-04-29

数组

核心

数据框

文档

1.2.0 / 2019-04-12

数组

核心

数据框

文档

1.1.5 / 2019-03-29

数组

核心

数据框

文档

1.1.4 / 2019-03-08

数组

核心

数据框

文档

1.1.3 / 2019-03-01

数组

数据框

文档

1.1.2 / 2019-02-25

数组

Bag

数据框

文档

核心

1.1.1 / 2019-01-31

数组

数据框

延迟执行

文档

核心

  • 解决 psutil 5.5.0 不允许 pickle Process 对象的问题 Janne Vuorela

1.1.0 / 2019-01-18

数组

数据框

文档

核心

1.0.0 / 2018-11-28

数组

数据框

文档

核心

0.20.2 / 2018-11-15

数组

数据框

文档

0.20.1 / 2018-11-09

数组

核心

数据框

文档

0.20.0 / 2018-10-26

数组

Bag

核心

数据框

文档

0.19.4 / 2018-10-09

数组

Bag

数据框

核心

文档

0.19.3 / 2018-10-05

数组

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

文档

0.18.2 / 2018-07-23

Array

Bag

Dataframe

Delayed

Core

0.18.1 / 2018-06-22

Array

DataFrame

Core

0.18.0 / 2018-06-14

Array

Dataframe

Bag

Core

0.17.5 / 2018-05-16

Array

DataFrame

0.17.4 / 2018-05-03

Dataframe

0.17.3 / 2018-05-02

Array

DataFrame

Core

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

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

0.17.2 / 2018-03-21

Array

DataFrame

Bag

Core

0.17.1 / 2018-02-22

Array

DataFrame

Core

0.17.0 / 2018-02-09

Array

DataFrame

Bag

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

Core

0.16.1 / 2018-01-09

Array

DataFrame

Core

0.16.0 / 2017-11-17

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

Array

DataFrame

Core

0.15.4 / 2017-10-06

Array

  • 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)

Core

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

0.15.3 / 2017-09-24

Array

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 支持混合 categoricals (dask#2676)

Core

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

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

  • 移除 Bokeh 绘图中的 resize 工具 (dask#2688)

0.15.2 / 2017-08-25

Array

Bag

DataFrame

Core

0.15.1 / 2017-07-08

0.15.0 / 2017-06-09

Array

Bag

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

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

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

DataFrame

Core

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

  • 支持带有嵌套调度器调用的回调函数 (dask#2397)

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

0.14.3 / 2017-05-05

DataFrame

  • 支持 Pandas 0.20.0

0.14.2 / 2017-05-03

Array

Bag

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

DataFrame

Core

0.14.1 / 2017-03-22

Array

DataFrame

  • 修复了 to_parquet 在空分区上的问题 (dask#2020)

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

  • 优化 shuffle 性能 (dask#2032)

  • 支持沿时间窗口的高效 repartitioning,例如 repartition(freq='12h') (dask#2059)

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

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

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

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

Delayed

  • repeated attribute access on delayed objects uses the same key (dask#2084)

Core

  • 改进点状图可视化中节点的命名,避免通用 apply (dask#2070)

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

0.14.0 / 2017-02-24

Array

Bag

DataFrame

Delayed

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

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

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

Core

  • 改进极端情况下的 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

Array

  • dask.array 的强制 dtypes。所有操作都保留 dtype 信息,如果无法推断,map_blocks 等 UDF 函数现在需要一个 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)

Core

0.12.0 / 2016-11-03

DataFrame

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

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

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

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

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

  • 添加 dataframe.select_dtypes,它与 pandas 方法 相似 (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)

  • 支持 inplace 运算符,例如 df.x += 1 (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 merge 上的 divisions 处理 (dask#1666)

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

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

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

  • 支持 loc 中的二维索引 (dask#1726)

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

  • 支持 dask.array ufuncs on dask.dataframe objects (dask#1669)

Array

Bag

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

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

Administration

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

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

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

  • 添加 versioneer 用于基于 git-commit 的版本控制 (dask#1569)

  • 在点状图可视化中传递 node_attr 和 edge_attr 关键字 (dask#1614)

  • 添加 Windows 的持续测试,使用 Appveyor (dask#1648)

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

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

  • 微优化 get_dependencies (dask#1722)

0.11.0 / 2016-08-24

主要变化

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

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

重大更改

  • distributed.s3distributed.hdfs 命名空间已移除。改为使用普通方法中的协议,例如 read_text('s3://...'

  • Dask.array.reshape 现在在某些情况下会出错,而以前它会创建非常多的任务。

0.10.2 / 2016-07-27

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

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

  • 发现在某些高度并发的情况下,特别是 Windows 上,磁盘 shuffle 会产生错误结果。通过对 partd 库的修复,这个问题已得到解决。

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

  • 支持 --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

Distributed

  • 将可执行文件(如 dscheduler)重命名为 dask-scheduler

  • 提高在许多快速任务情况下的调度器性能(对 shuffle 很重要)

  • 改进 work stealing,使其了解预期的函数运行时间和数据大小。这极大地增加了可以在分布式调度器上高效运行的算法范围,而无需用户具备专业的知识。

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

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

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

  • 支持 Joblib 接口中提交 futures 的干净取消

其他

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

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

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_text, read_csv functions,它们现在支持协议,例如 dd.read_csv('s3://bucket/keys*.csv')

Array

  • 添加对 scipy.LinearOperator 的支持

  • 改进磁盘数据结构的可选锁定

  • 更改 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

Distributed

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

  • 针对非常快的任务,自适应超额分配 worker

  • 改进 PyPy 支持

  • 改进针对不均衡 worker 的 work stealing

  • 使用 tree-scatters 高效分散数据

其他

  • 添加 lzma/xz 压缩支持

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

  • 改进单机 shuffle 操作的哈希

  • 添加新的 start state 回调方法

  • 通用性能调优

0.8.1 / 2016-03-11

Array

  • 修复了 range slicing 的 bug,该 bug 可能周期性地导致不正确的结果。

  • 改进了对 arg 归约(argmin, argmax 等)的支持和弹性

Bag

  • 添加 zip 函数

DataFrame

  • 添加 corrcov 函数

  • 添加 melt 函数

  • 修复了 io 到 bcolz 和 hdf5 的 bug

0.8.0 / 2016-02-20

Array

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

  • 线性代数,tril, triu, LU, inv, cholesky, solve, solve_triangular, eye, lstsq, diag, corrcoef

Bag

  • 添加树状归约

  • 添加 range 函数

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

DataFrame

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

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

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

  • 内部更改以改进图序列化

其他

  • 文档更新

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

  • profiler 绘图的美学变化

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

0.7.6 / 2016-01-05

Array

  • 改进线程安全

  • 树状归约

  • 添加 view, compress, hstack, dstack, vstack 方法

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

DataFrame

  • 改进线程安全

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

Imperative

  • 移除融合结果的优化 passes。

Core

  • 移除 dask.distributed

  • 提高块文件读取性能

  • 序列化改进

  • 测试 Python 3.5

0.7.4 / 2015-10-23

这主要是错误修复版本。一些值得注意的变化包括

  • 修复与 numpy 1.10 和 pandas 0.17 发布相关的微小 bug

  • 修复了随机数生成中的一个 bug,该 bug 会因生日悖论导致重复的块

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

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

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

  • dask.array 添加 reshape 和 ravel

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

弃用

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

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

0.7.3 / 2015-09-25

诊断

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

DataFrame

此版本改进了 pandas API 的覆盖率。其中包括 nunique, nlargest, quantile。修复了读取非 ascii csv 文件时的编码问题。改进了 resample 的性能并修复了 bug。更灵活的 read_hdf 支持 globbing。以及更多内容。修复了 dask.imperativedask.bag 中的各种 bug。

0.7.0 / 2015-08-15

DataFrame

此版本包含重要的 bug 修复以及与 Pandas API 的对齐。这是使用以及 Pandas 核心开发人员最近参与的结果。

  • 新操作:query, rolling operations, drop

  • 改进的操作:quantiles, 对完整 dataframe 的算术运算, dropna, constructor logic, merge/join, elemwise operations, groupby aggregations

Bag

  • 修复了 fold 在 null 默认参数时的 bug

Array

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

基础设施

  • 数组和 dataframe 集合使用确定性键创建图。这些键往往较长(哈希字符串),但在计算之间应该保持一致。这对于未来的缓存非常有用。

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

0.6.1 / 2015-07-23

Distributed

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

DataFrame

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

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

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

Array

  • 各种 bug 修复

  • Histogram 函数

调度

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

其他

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

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

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