Dask 2026.6.0: Merge Partition Bug and DataFrame Fixes


Dask 2026.6.0 published on 11 June 2026. The headline fix is a DataFrame.merge regression that silently dropped rows when the graph had exactly 128 or 129 partitions. Operators running wide merges on large partitioned datasets should treat this as a correctness patch, not a cosmetic release.

The full release notes and downloads are on the GitHub release page.

PR #12430 fixes a bug where Dataframe.merge lost data when the task graph contained 128 or 129 partitions. The failure mode is quiet: merged output can be incomplete without raising an error, which makes it dangerous in production ETL where partition counts often land near power of two boundaries after repartitioning or shuffle stages.

If your pipelines merge two large Dask DataFrames and you have seen row count drift that does not match a known join key mismatch, check whether your partition count hit 128 or 129 before and after this tag. The fix is in the merge path itself; no new configuration flag is required. Upgrading is the mitigation.

PR #12432 repairs Series.map(Series) when inputs are not co aligned. Non aligned index pairs previously produced wrong mapped values. That class of bug is easy to miss in notebook tests where indexes happen to line up.

Quantile work in PR #12380 tightens quantile and nanquantile behavior. PR #12370 raises NotImplementedError for da.quantile with weights on NumPy versions below 2.0 instead of returning incorrect results. Pipelines that pass weights into array quantiles on older NumPy stacks will now fail fast.

Pandas 3.1 compatibility landed in PR #12447: the inplace keyword on DataFrame.drop is deprecated. PR #12414 fixes add_prefix and add_suffix against pandas nightly and adds explicit axis support. PR #12413 removes legacy dtype testing strings for decimals. Teams tracking pandas nightlies or the 3.1 line should run merge and describe workloads after upgrade.

PR #12416 adds Cholesky decomposition support for complex dtypes in dask.array. PR #12366 stores empty arrays correctly with zarr 3.2.0, which matters for pipelines that write placeholder shards before backfill jobs populate them.

PR #12384 removes the numexpr dependency. Downstream environments that relied on numexpr acceleration through Dask will need to confirm whether their own dependency pins still pull it in. PR #12382 raises the minimum pyyaml version to 5.4.1.

On the free threading front, PR #12439 enables the msgpack C extension. Serialization on Python 3.13t and 3.14t builds should see lower overhead when the extension loads. CI now exercises Linux ARM (PR #12408), Python 3.14 (PR #12373), and additional 3.14t package sets including numba, sparse, and h5py (PR #12338).

PR #12389 migrates CI to Pixi. PR #12452 adds a PyPI release workflow. PR #12417 repairs conda upload. PR #12443 stops building the dask-core pixi package twice. For maintainers and contributors the shift is mostly internal, but operators who build from source or mirror artifacts should expect Pixi based CI paths rather than the older conda first layout.

The release cycle also touched HTML representation security. PR #12423 enabled Jinja2 autoescape to block XSS in HTML reprs, then PR #12451 reverted that change. If you render Dask object HTML reprs in shared dashboards or notebook servers, the XSS surface remains open until a follow up lands. Track the changelog for a permanent fix.

PySpark tests were resurrected in PR #12410. Resurrected upstream CI repair work in PR #12436 and intermediate NumPy and pandas version matrices in PR #12372 reduce surprise breakage on dependency pins between your cluster image and the Dask version you deploy.

No broad API removals ship in this tag, but several dependency edges moved:

  • pyyaml >= 5.4.1 is now required.
  • numexpr is no longer a Dask dependency.
  • Pandas 3.1 deprecates inplace on DataFrame.drop.
  • Weighted da.quantile on NumPy below 2.0 now raises NotImplementedError.

Re run partition count checks on any merge stage that historically produced 128 or 129 partitions. Compare row counts against a known good baseline or a single node pandas reference merge.