Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
80 commits
Select commit Hold shift + click to select a range
768b3e9
impl map_from_entries
Dec 14, 2025
c68c342
Revert "impl map_from_entries"
Dec 16, 2025
d887555
Merge branch 'apache:main' into main
kazantsev-maksim Dec 16, 2025
231aa90
Merge branch 'apache:main' into main
kazantsev-maksim Dec 17, 2025
9500bbb
Merge branch 'apache:main' into main
kazantsev-maksim Dec 24, 2025
9577481
Merge branch 'apache:main' into main
kazantsev-maksim Dec 28, 2025
3791557
Merge branch 'apache:main' into main
kazantsev-maksim Jan 2, 2026
7c2f082
Merge branch 'apache:main' into main
kazantsev-maksim Jan 3, 2026
609a605
Merge branch 'apache:main' into main
kazantsev-maksim Jan 6, 2026
a151b2c
Merge branch 'apache:main' into main
kazantsev-maksim Jan 7, 2026
ad3e7f5
Merge branch 'apache:main' into main
kazantsev-maksim Jan 10, 2026
ea92e4b
Merge branch 'apache:main' into main
kazantsev-maksim Jan 14, 2026
8dfeca3
Merge branch 'apache:main' into main
kazantsev-maksim Jan 17, 2026
559741e
Merge branch 'apache:main' into main
kazantsev-maksim Jan 20, 2026
ebda14e
Merge branch 'apache:main' into main
kazantsev-maksim Jan 21, 2026
408152e
Merge branch 'apache:main' into main
kazantsev-maksim Jan 23, 2026
d7857b2
Merge branch 'apache:main' into main
kazantsev-maksim Jan 24, 2026
aef41be
Merge branch 'apache:main' into main
kazantsev-maksim Jan 29, 2026
5ac1c58
Merge branch 'apache:main' into main
kazantsev-maksim Jan 30, 2026
9ae8e23
Merge branch 'apache:main' into main
kazantsev-maksim Feb 1, 2026
5ca3888
Merge branch 'apache:main' into main
kazantsev-maksim Feb 4, 2026
160a817
Merge branch 'apache:main' into main
kazantsev-maksim Feb 5, 2026
88fc313
Merge branch 'apache:main' into main
kazantsev-maksim Feb 7, 2026
e14c180
Merge branch 'apache:main' into main
kazantsev-maksim Feb 13, 2026
610a885
Merge branch 'apache:main' into main
kazantsev-maksim Feb 20, 2026
f8acb2c
Merge branch 'apache:main' into main
kazantsev-maksim Feb 21, 2026
ec94897
Merge branch 'apache:main' into main
kazantsev-maksim Feb 26, 2026
43405e4
Merge branch 'apache:main' into main
kazantsev-maksim Feb 27, 2026
47b4915
Merge branch 'apache:main' into main
kazantsev-maksim Mar 1, 2026
26e2682
Merge branch 'apache:main' into main
kazantsev-maksim Mar 3, 2026
6cb5f07
Merge branch 'apache:main' into main
kazantsev-maksim Mar 4, 2026
ec194fb
Merge branch 'apache:main' into main
kazantsev-maksim Mar 31, 2026
256fccb
Merge branch 'apache:main' into main
kazantsev-maksim Apr 3, 2026
912c8f9
Merge branch 'apache:main' into main
kazantsev-maksim Apr 3, 2026
561a664
Merge branch 'apache:main' into main
kazantsev-maksim Apr 8, 2026
d926ef4
Merge branch 'apache:main' into main
kazantsev-maksim Apr 11, 2026
671412c
Merge branch 'apache:main' into main
kazantsev-maksim Apr 17, 2026
c9f52d1
Merge branch 'apache:main' into main
kazantsev-maksim Apr 22, 2026
67f72d9
Merge branch 'apache:main' into main
kazantsev-maksim Apr 23, 2026
314e594
Merge branch 'apache:main' into main
kazantsev-maksim Apr 24, 2026
ac8292f
Merge branch 'apache:main' into main
kazantsev-maksim May 1, 2026
c9c140e
Merge branch 'apache:main' into main
kazantsev-maksim May 7, 2026
decca58
Merge branch 'apache:main' into main
kazantsev-maksim May 13, 2026
0919b33
Merge branch 'apache:main' into main
kazantsev-maksim May 16, 2026
7495e21
Merge branch 'apache:main' into main
kazantsev-maksim May 19, 2026
0a37a60
Merge branch 'apache:main' into main
kazantsev-maksim May 21, 2026
abbba84
Merge branch 'apache:main' into main
kazantsev-maksim May 25, 2026
6020560
Merge branch 'apache:main' into main
kazantsev-maksim May 28, 2026
e2bdfb1
Merge branch 'apache:main' into main
kazantsev-maksim May 31, 2026
3edfc33
Merge branch 'apache:main' into main
kazantsev-maksim Jun 3, 2026
a39e860
Merge branch 'apache:main' into main
kazantsev-maksim Jun 4, 2026
e88dd7b
Merge branch 'apache:main' into main
kazantsev-maksim Jun 5, 2026
3e29d37
Merge branch 'apache:main' into main
kazantsev-maksim Jun 7, 2026
4068359
Merge branch 'apache:main' into main
kazantsev-maksim Jun 12, 2026
a3cb8de
Merge branch 'apache:main' into main
kazantsev-maksim Jun 13, 2026
b33726f
Merge branch 'apache:main' into main
kazantsev-maksim Jun 21, 2026
698f7a1
Merge branch 'apache:main' into main
kazantsev-maksim Jun 22, 2026
18162a6
Merge branch 'apache:main' into main
kazantsev-maksim Jun 23, 2026
6f6eb6f
Merge branch 'apache:main' into main
kazantsev-maksim Jul 1, 2026
c21a42e
Merge branch 'apache:main' into main
kazantsev-maksim Jul 2, 2026
618ae48
Merge branch 'apache:main' into main
kazantsev-maksim Jul 3, 2026
4d068e3
Merge branch 'apache:main' into main
kazantsev-maksim Jul 3, 2026
a2f519f
Merge branch 'apache:main' into main
kazantsev-maksim Jul 4, 2026
36e13d5
Merge branch 'apache:main' into main
kazantsev-maksim Jul 7, 2026
2c8ae52
Merge branch 'apache:main' into main
kazantsev-maksim Jul 8, 2026
593f7b6
Merge branch 'apache:main' into main
kazantsev-maksim Jul 11, 2026
b1d3a1a
Merge branch 'apache:main' into main
kazantsev-maksim Jul 14, 2026
e2de8c0
Merge branch 'apache:main' into main
kazantsev-maksim Jul 26, 2026
e6fd376
Merge branch 'apache:main' into main
kazantsev-maksim Aug 1, 2026
11528e3
Merge branch 'apache:main' into main
kazantsev-maksim Aug 1, 2026
e17397f
Merge branch 'apache:main' into main
kazantsev-maksim Aug 9, 2026
b79e747
Merge branch 'apache:main' into main
kazantsev-maksim Aug 12, 2026
3988b0f
Merge branch 'apache:main' into main
kazantsev-maksim Aug 19, 2026
f705c43
Merge branch 'apache:main' into main
kazantsev-maksim Aug 20, 2026
741747d
Merge branch 'apache:main' into main
kazantsev-maksim Aug 22, 2026
9495593
Merge branch 'apache:main' into main
kazantsev-maksim Aug 27, 2026
0ac77df
Merge branch 'apache:main' into main
kazantsev-maksim Aug 28, 2026
1346dc4
Merge branch 'apache:main' into main
kazantsev-maksim Aug 31, 2026
b2e0ffd
Merge branch 'apache:main' into main
kazantsev-maksim Sep 1, 2026
74e92e8
work
Sep 4, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/source/user-guide/latest/expressions.md
Original file line number Diff line number Diff line change
Expand Up @@ -164,7 +164,7 @@ The tables below list every Spark built-in expression with its current status.
| `array_repeat` | ✅ | Native | |
| `array_union` | ✅ | Native | NaN/signed-zero handling may differ ([details](compatibility/floating-point.md)) |
| `arrays_overlap` | ✅ | Native | |
| `arrays_zip` | ✅ | Native | |
| `arrays_zip` | ✅ | Hybrid | Arrays of maps route through the JVM codegen dispatcher; scalar/array/struct elements run natively. NullType elements fall back to Spark |
| `element_at` | ✅ | Native | |
| `flatten` | ✅ | Native | Binary/struct/map elements fall back |
| `get` | ✅ | — | |
Expand Down
8 changes: 6 additions & 2 deletions spark/src/main/scala/org/apache/comet/serde/arrays.scala
Original file line number Diff line number Diff line change
Expand Up @@ -814,10 +814,14 @@ object CometArrayPosition extends CometExpressionSerde[ArrayPosition] with Array
}
}

object CometArraysZip extends CometExpressionSerde[ArraysZip] {
object CometArraysZip extends CometExpressionSerde[ArraysZip] with CodegenDispatchFallback {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Performance

[P2] Could you add a matched microbenchmark for the newly dispatched arrays-of-maps path before enabling it by default? This marker changes existing queries from Spark projection fallback to Spark-generated evaluation inside the JVM bridge. That path still evaluates ArraysZip row by row and additionally imports the input and materializes the nested Arrow output. Avoiding the surrounding projection fallback can pay for those costs, but the two correctness queries do not establish when it does.

Please compare dispatch enabled with the existing dispatcher-disabled fallback on identical nonconstant column inputs, including a map-only projection and the mixed native projection, small and multi-batch inputs, and small versus larger maps/arrays. Verify the same results and include warm steady-state timings with the batch size and data shape. I am not asserting a measured slowdown. The missing comparison is the evidence needed to assess the default-path performance tradeoff.


// MapType elements have no native impl; they route through the JVM codegen dispatcher.
// This reason surfaces only when the dispatcher is disabled or refuses the tree.
override def getUnsupportedReasons(): Seq[String] = Seq(
"Not all input data types are supported; falls back to Spark for unsupported types")
"MapType element arrays are not supported natively and are handled via JVM codegen dispatch; " +
"this fallback only applies when the dispatcher is disabled. NullType elements remain " +
"unsupported (the dispatcher's isSupportedDataType does not admit NullType).")

private def isTypeSupported(dt: DataType): Boolean = {
import DataTypes._
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -218,12 +218,18 @@ SELECT arrays_zip(array(struct(1, 2, 3), struct(2, 3, 4)));
-- query
-- SELECT arrays_zip(array(struct(1, 2, 3), struct(2, 3, 4), struct(null, null, null)));

-- Arrays of maps
-- FIXME: COMET: map is not supported, unsupported arguments for CreateArray, unsupported arguments for ArraysZip
-- +------------------------------------------------------------------+
-- |arrays_zip(array(map(1.0, 2, 3.0, 4)), array(map(1.0, 2, 3.0, 4)))|
-- +------------------------------------------------------------------+
-- |[{{1.0 -> 2, 3.0 -> 4}, {1.0 -> 2, 3.0 -> 4}}] |
-- +------------------------------------------------------------------+
-- query
-- SELECT arrays_zip(array(map(1.0, '2', 3.0, '4')), array(map(1.0, '2', 3.0, '4')));
-- arrays_zip over arrays of maps: MapType elements have no native impl; the projection stays
-- in Comet via the JVM codegen dispatcher. Input is built from a table column so the
-- expression is not constant-folded before reaching Comet.
statement
CREATE TABLE arrays_zip_map_tbl using parquet AS SELECT 1 AS k1, 2 AS v1, 3 AS k2, 4 AS v2;

-- positive: arrays of maps must execute via dispatch, not whole-projection Spark fallback
query
SELECT arrays_zip(array(map(k1, v1), map(k2, v2)), array(map('x', v2), map('y', v1)))
FROM arrays_zip_map_tbl

-- mixed projection: map-element dispatch + scalar native path in the same projection
query
SELECT arrays_zip(array(map(k1, v1)), array(k1, k2)), v1 + v2
FROM arrays_zip_map_tbl
Loading