andygrove opened a new issue, #6749:
URL: https://github.com/apache/datafusion-comet/issues/6749

   ### Describe the bug
   
   The manual `Spark SQL Writer Tests (manual)` workflow 
(`.github/workflows/spark_sql_writer_tests.yml`) is meant to run Spark's 
Parquet writer suites with Comet's native writer on. It never does. The 
workflow sets `ENABLE_COMET_WRITE=true`, which only changes the default of 
`spark.comet.write.parquet.enabled`. The native write reports `Incompatible` 
(on Spark 3.x through `CometDataWritingCommand`, on 4.0+ through 
`CometWriteFiles`), so the planner also needs 
`spark.comet.operator.DataWritingCommandExec.allowIncompatible=true` (3.x) or 
`spark.comet.operator.WriteFilesExec.allowIncompatible=true` (4.0+). Neither 
the workflow nor the patched `SharedSparkSession` in `dev/diffs/*.diff` sets 
them, so every write in a green run goes through Spark's own writer.
   
   Setting the documented env var does not help either. 
`createOperatorIncompatConfig` gives each operator key an env-var default 
(`SPARK_COMET_OPERATOR_DATAWRITINGCOMMANDEXEC_ALLOWINCOMPATIBLE`, and the 
entry's doc says it "can be overridden" that way), but 
`CometConf.isOperatorAllowIncompat` reads only the SQL conf string through 
`readWithAlternatives` and never consults the entry's default. With both env 
vars set, `COMET_OPERATOR_DATA_WRITING_COMMAND_ALLOW_INCOMPAT.get()` returns 
`true` while `isOperatorAllowIncompat("DataWritingCommandExec")` returns 
`false`, and the write stays on `InsertIntoHadoopFsRelationCommand`.
   
   Found while reviewing #4746. Its 3.5 run (`peterxcli/datafusion-comet` run 
37306706506) passed 377 tests, and the log never shows the `Comet supports 
DataWritingCommandExec when ... but has notes` warning that `CometExecRule` 
prints when it admits a native write.
   
   ### Steps to reproduce
   
   Run the workflow, or locally run any Spark writer suite with 
`ENABLE_COMET=true ENABLE_COMET_WRITE=true` and check the executed plans. They 
contain `Execute InsertIntoHadoopFsRelationCommand`, not `CometNativeWrite` 
(3.x) or `CometWriteFiles` (4.0+).
   
   ### Expected behavior
   
   The workflow runs the native writer. Two ways to get there: make 
`isOperatorAllowIncompat` honor the entry's env-var default and set the 
operator env var in the workflow, or pass the operator key to the forked test 
JVM. `SparkBuild` forwards only `http.*`/`https.*` system properties, so plain 
`-D` flags on `build/sbt` do not reach the forked JVM.
   
   Even with the writer on, coverage is thin. Most of these suites write from 
local data, which Comet does not run natively, so the write falls back on 
`requiresNativeChildren`. Running the 3.5.9 suites from the test jar with the 
native writer on, only 10 tests committed a native write.
   
   ### Additional context
   
   Local runs of Spark's test jar (unpatched) with the writer on show one 
writer-specific failure, "Write Spark version into Parquet metadata" (#3427).
   


-- 
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: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to