You are viewing a plain text version of this content. The canonical link for it is here.
Posted to github@datafusion.apache.org by "andygrove (via GitHub)" <gi...@apache.org> on 2026/09/09 21:10:54 UTC
[PR] perf: [branch-1.0] evaluate posexplode array expressions once per batch (#5737) [datafusion-comet]
andygrove opened a new pull request, #5820:
URL: https://github.com/apache/datafusion-comet/pull/5820
Backport of #5737 to `branch-1.0`.
Cherry-picked from `cbe3b39035a5918fc65496ebfe08bcf8e7adfce2`. The planner change is
byte-identical to the original PR; only the new Rust test needed adaptation, described under
"What changes are included" below.
Note that this is a performance enhancement rather than a bug fix, unlike the other backports on
this branch so far. Including it in 1.0.1 is a release-management call, not something the change
itself forces.
## Which issue does this PR close?
Closes #5676 on `branch-1.0`.
## Rationale for this change
Plain `posexplode` places its array expression in both the positions expression and the values
projection, evaluating it twice per batch. `posexplode_outer` already materializes its wrapped
array once. For a computed array, the duplicate evaluation can repeat native work or a JVM
codegen-dispatch call.
## What changes are included in this PR?
The planner change is the original one: apply the outer wrapper first, then materialize the array
when positions are requested and the expression is not already a `Column`, so both positions and
values reference the resulting column. Plain array-column inputs keep their existing single
projection, and non-positional explode variants are unchanged. The intermediate column prefix is
renamed to `__comet_explode_`.
Two adaptations were needed for `branch-1.0`, both confined to the new Rust test:
- Added the `AtomicUsize`/`Ordering`, `ArrayRef` and `MemorySourceConfig` imports the test needs.
On `main` those were already in the test module, brought in by tests added after `branch-1.0`
was cut.
- Dropped `element_field_id: None` from the test's `ListInfo` literal. That proto field does not
exist on `branch-1.0`.
`branch-1.0` pins the same DataFusion version (54.1.0) as `main`, so no API adaptation was needed.
## How are these changes tested?
Same tests as the original PR, verified locally on `branch-1.0`:
- `cargo test -p datafusion-comet` passes 156 tests, including the new
`explode_evaluates_array_once_per_batch` planner regression.
- The regression was confirmed to fail on `branch-1.0` with the planner change reverted and the
test kept, reproducing the count from the original PR: plain positional explode over a computed
array evaluates the function 4 times for two batches instead of 2. So the duplicate evaluation
is present on `branch-1.0` and this backport is what removes it.
- `CometGenerateExecSuite` passes all 38 tests on Spark 4.1.3 / Java 17, including the new
`posexplode with a computed array from Parquet`.
- `CometSqlFileTestSuite` `expressions/array/posexplode.sql` passes.
- `cargo clippy --all-targets --workspace -- -D warnings` and `cargo fmt --all -- --check` are
clean, and Spotless and Scalastyle pass as part of the Maven run.
- `test-compile -Pspark-3.4 -Pscala-2.12` succeeds, so the new Scala test cross-compiles on the
oldest supported Spark/Scala combination.
## Are there any user-facing changes?
No. Results are unchanged; a computed array passed to `posexplode` is now evaluated once per batch
instead of twice.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: github-unsubscribe@datafusion.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: github-unsubscribe@datafusion.apache.org
For additional commands, e-mail: github-help@datafusion.apache.org
Re: [PR] perf: [branch-1.0] evaluate posexplode array expressions once per batch (#5737) [datafusion-comet]
Posted by "andygrove (via GitHub)" <gi...@apache.org>.
andygrove merged PR #5820:
URL: https://github.com/apache/datafusion-comet/pull/5820
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: github-unsubscribe@datafusion.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: github-unsubscribe@datafusion.apache.org
For additional commands, e-mail: github-help@datafusion.apache.org