Skip to content

feat: support map inputs for explode - #32

Open
rich7420 wants to merge 18 commits into
mainfrom
feat/2837-native-map-explode
Open

rich7420 wants to merge 18 commits into
mainfrom
feat/2837-native-map-explode

Conversation

@rich7420

@rich7420 rich7420 commented Sep 21, 2026 •

Copy link
Copy Markdown
Owner

Which issue does this PR close?

CI mirror of upstream apache/datafusion-comet#6107, addressing apache#2837. This fork PR does not close or merge the upstream issue.

Rationale for this change

Map inputs to explode and posexplode currently fall back to Spark.

What changes are included in this PR?

Support maps in all four explode variants by sharing their entry buffers with the existing unnest path. Preserve field metadata, entry order and outer NULL rows. Add regression tests and update support documentation.

How are these changes tested?

Local verification passed 18 Rust tests and 52 targeted tests on each of Spark 3.5.9 and 4.1.3, covering native execution, NULL/empty maps, nested inputs, sliced arrays and batch boundaries.

Upstream CI passed at 9601e81ba, including Required Checks. The corresponding fork run is not fully green: Spark 3.4 scans failed a file without ids next to a file with ids is checked on its own in ParquetReadSuite (544 passed, one failed in that job). Its missing-field-ID error assertion failed. The relationship to this map-explode change has not been established; do not treat the run as a complete cross-profile pass until the failure is classified and resolved.

@rich7420 rich7420 added run-all-spark-profiles Run Comet test suites against all supported Spark profiles run-spark-4.1-tests Run Spark 4.1 SQL tests across all modules labels Sep 21, 2026
@rich7420
rich7420 force-pushed the feat/2837-native-map-explode branch from 76768f2 to 9601e81 Compare September 28, 2026 14:50
rich7420 and others added 7 commits October 2, 2026 18:05
Cover JVM-fed maps, nullable Boolean batch boundaries, all-NULL/empty outer batches, native map producers, and stored floating-point keys. Require native generators and matching Spark results and schemas. Benchmark map variants and nested map/array inputs with sinks that consume keys and positions. Remove the unrelated Parquet field-ID assertion change so it can be reviewed independently.
Keep input arrays as temporary placeholders until generated columns replace them. Build take indices only when a carried column consumes them. Cover recursive unnest with and without carried columns and both drop and outer null handling. Preserve the existing bounded map and array execution path.
@rich7420
rich7420 marked this pull request as ready for review October 3, 2026 16:36
@rich7420 rich7420 added run-spark-4.1-tests Run Spark 4.1 SQL tests across all modules run-all-spark-profiles Run Comet test suites against all supported Spark profiles and removed run-spark-4.1-tests Run Spark 4.1 SQL tests across all modules run-all-spark-profiles Run Comet test suites against all supported Spark profiles labels Oct 17, 2026
rich7420 and others added 6 commits October 18, 2026 17:52
Port map planning to the extracted ExplodeBuilder while preserving once-per-batch evaluation and returning an error for malformed map entry types.
Split individual List rows before materialization and cap repetition so carried buffers and child offsets stay within Arrow's offset limits. Preserve shared entry buffers, positions and outer semantics.
Fill non-null primitive runs directly for expansions of at least five and build short-string offsets with one Vec extension per run. Retain Arrow take for smaller expansions and nullable primitives.
Native generators materialize carried columns between expansions and were slower than Spark's pipeline in the nested benchmark. Keep maps followed by another generator on Spark across projections and filters, while retaining native single maps and chains separated by an exchange.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:aggregation area:expressions area:ffi area:Iceberg area:memory area:scan area:udf area:writer enhancement New feature or request run-all-spark-profiles Run Comet test suites against all supported Spark profiles run-spark-4.1-tests Run Spark 4.1 SQL tests across all modules

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant