arrays_zip with two same-named inputs fails with "ArrowArray struct has 2 children (expected 1)"
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 78/100
Línea de trabajo
Comienza en CometArraysZip.getSupportLevel y compara sus comprobaciones con CometCreateNamedStruct.getSupportLevel. Reproduce las tres consultas arrays_zip del issue y, después, haz que los nombres de campo duplicados recurran al fallback en lugar de llegar a la importación de JVM Arrow. Confirma que arrays_zip(a, b) sigue ejecutándose de forma nativa y que los dos casos con el mismo nombre coinciden con Spark sin el error de importación.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Describe the bug
arrays_zip over two inputs with the same name fails the task when Comet runs it natively. Spark names each struct field after its input, so arrays_zip(a, a) has type array<struct<a: string, a: string>>, and Comet's native projection returns that struct fine. Importing the result on the JVM then fails, because Java Arrow keys struct children by name and the two a children collapse into one:
java.lang.IllegalStateException: ArrowArray struct has 2 children (expected 1)
at org.apache.arrow.util.Preconditions.checkState(Preconditions.java:562)
at org.apache.arrow.c.ArrayImporter.doImport(ArrayImporter.java:92)
at org.apache.arrow.c.ArrayImporter.importChild(ArrayImporter.java:83)
at org.apache.arrow.c.ArrayImporter.doImport(ArrayImporter.java:101)
at org.apache.arrow.c.ArrayImporter.importArray(ArrayImporter.java:68)
at org.apache.arrow.c.ArrowImporter.importVector(ArrowImporter.java:62)
at org.apache.comet.vector.NativeUtil.importVector(NativeUtil.scala:264)
at org.apache.comet.vector.NativeUtil.getNextBatch(NativeUtil.scala:211)
at org.apache.comet.CometExecIterator.getNextBatch(CometExecIterator.scala:237)
arrays_zip(a, b) over the same table works. Spark returns the zipped rows for all three queries below.
This is the same Java Arrow limitation as #1015 and #5605. CometCreateNamedStruct.getSupportLevel already returns Unsupported when names has duplicates, and DataTypeSupport rejects such structs in operator schemas, but CometArraysZip.getSupportLevel only checks the input types and never looks at expr.names. Two same-named inputs come up naturally after a join, for example arrays_zip(t1.tags, t2.tags).
Steps to reproduce
Default configs, reproduced on main at f7952de73 with Spark 4.1.3:
spark.range(4)
.selectExpr("id", "array(cast(id as string), 'x') as a", "array(id, id + 1) as b")
.write.parquet(path)
val df = spark.read.parquet(path)
df.selectExpr("id", "arrays_zip(a, a) AS r").collect() // IllegalStateException
df.selectExpr("id", "arrays_zip(b, b) AS r").collect() // IllegalStateException
df.selectExpr("id", "arrays_zip(a, b) AS r").collect() // matches Spark
The plan is CometProject over CometNativeScan.
Expected behavior
Either match Spark or fall back. The smallest fix is probably for CometArraysZip.getSupportLevel to return Unsupported when expr.names has duplicates, the same way CometCreateNamedStruct does.
Additional context
Found while reviewing #6036, but unrelated to that PR's change.
- Lenguaje dominante
- Scala
- Estrellas
- 1.3k
- Forks
- 377
- Merge medio
- 2 d 10 h
- PR fusionados (30 d)
- 282
Preparar el entorno
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de apache/datafusion-comet
-
area:ci bug priority:low
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
apache/datafusion-comet#6060 ·
Los mantenedores suelen responder en 1 día
-
requires-triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
apache/datafusion-comet#5661 ·
Los mantenedores suelen responder en 1 día
-
area:scan enhancement
Dificultad 2/5 1-3 horas Aptitud para principiantes 86/100
apache/datafusion-comet#5319 ·
Los mantenedores suelen responder en 1 día
-
area:ci priority:low
Dificultad 2/5 1-3 horas Aptitud para principiantes 66/100
apache/datafusion-comet#4586 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
area:expressions documentation priority:low spark 4.1
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
apache/datafusion-comet#4490 ·
Los mantenedores suelen responder en 1 día
Todos los issues de apache/datafusion-comet
Issues similares
-
Files.createDirectories throws a bare IOException when another process creates the directory firstAbierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
scala-native/scala-native#5077 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 88/100
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
ergoplatform/ergo#2579 ·
Los mantenedores suelen responder en 2 días
-
x:action/improve x:size/tiny x:type/content
Dificultad 1/5 1-3 horas Aptitud para principiantes 88/100
Los mantenedores suelen responder en 1 día