Skip to content

chore(python): build the Python client against DataFusion 55 - #2385

Draft
andygrove wants to merge 1 commit into
apache:mainfrom
andygrove:chore/python-datafusion-55
Draft

chore(python): build the Python client against DataFusion 55#2385
andygrove wants to merge 1 commit into
apache:mainfrom
andygrove:chore/python-datafusion-55

Conversation

@andygrove

Copy link
Copy Markdown
Member

Which issue does this PR close?

N/A - follow-up to the DataFusion 55 upgrade of the Rust workspace.

Rationale for this change

python/ is a separate Cargo workspace from the rest of the repo, so the DataFusion 55 upgrade did not reach it. The Python client is still built against the DataFusion 54 crates and against the crates.io ballista 54.0.0 release, which means the wheel we ship no longer matches the engine in main.

datafusion-python has not published a DataFusion 55 release yet, so this PR tracks the bump branch at https://github.com/andygrove/datafusion-python.git until 55.0.0 is on crates.io.

That choice forces the ballista crates back onto path dependencies. The published 54.0.0 crates are built against DataFusion 54, and pyballista passes a DataFusion DataFrame produced by a Ballista SessionContext straight into datafusion_python::dataframe::PyDataFrame::new, so the two sides have to agree on the DataFusion version. This restores the arrangement that was in place before #2277.

What changes are included in this PR?

  • Bump the pyballista crate version to 55.0.0.
  • Point datafusion-python at the bump-datafusion-55.0.0 branch of https://github.com/andygrove/datafusion-python.git, and pin datafusion / datafusion-proto to =55.0.0.
  • Switch ballista, ballista-core, ballista-executor and ballista-scheduler back to path dependencies on the workspace crates.
  • Bump pyo3 from 0.28 to 0.29 so it matches the version datafusion-python is built with.
  • Bump the datafusion Python dependency in pyproject.toml from ==54 to ==55.
  • Drop the two concurrent_tasks hacks in python/src/cluster.rs. They carried a TODO waiting for the rename, and ExecutorProcessConfig::vcores is now available.
  • Refresh python/Cargo.lock.

Verified locally in the python/ workspace: cargo check --locked, cargo clippy --locked --all-targets -- -D warnings and cargo fmt --check all pass.

Two things are deliberately left for a follow-up, both blocked on the datafusion-python release:

  • python/uv.lock is unchanged, because uv lock cannot resolve datafusion==55 while it is absent from PyPI. Every job that runs uv sync will fail until datafusion-python 55.0.0 is published, at which point the lockfile can be regenerated.
  • The datafusion-python git dependency should become a =55.0.0 crates.io pin once that release exists.

This is why the PR is a draft.

Are there any user-facing changes?

The Python client will require datafusion==55 instead of datafusion==54. There are no API changes to the client itself.

The Rust workspace moved to DataFusion 55, but `python/` is a separate
Cargo workspace that was still pinned to the DataFusion 54 crates and to
the crates.io `ballista` 54.0.0 release.

datafusion-python has no DataFusion 55 release yet, so point the
dependency at the bump branch until 55.0.0 lands on crates.io. That in
turn forces the `ballista` crates back onto path dependencies: the
published 54.0.0 crates are built against DataFusion 54 and cannot be
mixed with a DataFusion 55 datafusion-python, since `pyballista` hands
DataFusion `DataFrame` values straight to `PyDataFrame::new`.

Also bump pyo3 to 0.29 to match datafusion-python, and drop the two
`concurrent_tasks` hacks in `cluster.rs` now that the field they were
waiting on is available as `ExecutorProcessConfig::vcores`.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant