Let custom operators declare that they tolerate a coalesced partition count
Maintainers usually reply within 1 day
@andygrove is already working on this.
Since Nov 1, 2026.
Assessment
- Difficulty
- 5/5
- Estimated time
- Over a week
- Newbie friendliness
- 12/100
Research direction
The coalescing decision lives in CoalescePartitionsRule and the hand-kept tolerates_partition_count_change operator list. Read the Ballista extension trait and the SchedulerConfig resolver that apache/datafusion-ballista#2721 added for partition slicing, since the issue asks for a similar hook. Done would be a design settled with maintainers first, then a trait method that lets a stage opt in without Ballista depending on Comet.
Written by the indexing model from the issue text.
Description
Is your feature request related to a problem or challenge? Please describe what you are trying to do.
The adaptive planner's CoalescePartitionsRule coalesces a shuffle's partitions only when every operator between the stage root and the shuffle is on a hand-kept list of operators that produce the same rows over any partitioning of their input (tolerates_partition_count_change). An extension operator from a client that submitted its own physical plan is assumed to depend on the count, which is the safe default. Comet Native Executors (apache/datafusion-comet#7288) runs every stage as a CometFragmentExec, so its queries never get partition coalescing.
Describe the solution you'd like
Let an ExecutionPlan declare this itself, for example through a method on a Ballista extension trait, or a resolver in SchedulerConfig like the one apache/datafusion-ballista#2721 adds for partition slicing. A Comet stage that reads only hash shuffles could then declare it.
Describe alternatives you've considered
Keeping the whitelist and adding Comet's operator to it would make Ballista depend on Comet.
Additional context
Comet's CometFragmentExec also carries a partition descriptor child that would have to coalesce along with its shuffle inputs.
- Dominant language
- Rust
- Stars
- 2.2k
- Forks
- 337
- Avg merge
- 2d 8h
- Merged PRs (30d)
- 127
Getting set up
Starts the project's dev container in your browser, under your own GitHub account.
- Ships a Dockerfile or Docker Compose file
- Has a pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from apache/datafusion-ballista
-
Executor's default work dir is deleted at startup and recreated without `TempDir`'s permissionsPossibly taken @aetherxeg-source claimed this today. Openbug
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
apache/datafusion-ballista#2767 ·
Maintainers usually reply within 1 day
-
Add a typed SessionConfigExt setter for ballista.execution.modePossibly taken @Atharva884 claimed this 3 days ago. Open
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
apache/datafusion-ballista#2729 · 1 comment ·
Maintainers usually reply within 1 day
-
docs: document the trust model for Python UDFs on Python-started clustersPossibly taken @milenkovicm claimed this 2 days ago. Open
Difficulty 1/5 1-3 hours Newbie friendliness 83/100
apache/datafusion-ballista#2687 ·
Maintainers usually reply within 1 day
-
development-process enhancement
Difficulty 4/5 3-5 days Newbie friendliness 55/100
apache/datafusion-ballista#2773 ·
Maintainers usually reply within 1 day
-
bug
Difficulty 3/5 1-2 days Newbie friendliness 65/100
apache/datafusion-ballista#2768 ·
Maintainers usually reply within 1 day
All issues in apache/datafusion-ballista
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 77/100
near/near-sdk-rs#1676 ·
Maintainers usually reply within 2 days
-
auto:producer auto:security
Difficulty 2/5 1-3 hours Newbie friendliness 66/100
fritzprix/libr-agent#2595 ·
Maintainers usually reply within 1 day
-
area:fs type:fix
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
Tripstack-Corp/spyc#1002 ·
Maintainers usually reply within 1 day
-
github_actions security
Difficulty 2/5 1-3 hours Newbie friendliness 85/100
dekobon/big-code-analysis#1815 ·
Maintainers usually reply within 1 day
-
[Detail Bug] Request logs can be forged via control characters in fetch object keys (log injection)Open
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
s2-streamstore/cachey#211 ·
Maintainers usually reply within 1 day