abjain123 opened a new issue, #18386:
URL: https://github.com/apache/iceberg/issues/18386

   ### Apache Iceberg version
   
   1.11.0
   
   ### Query engine
   
   Spark
   
   ### Please describe the bug 🐞
   
   In Apache Iceberg v3, creating a table with a VARIANT column using ORC as 
the default write format ('write.format.default' = 'orc') succeeds during DDL 
creation without validation warnings. However, executing an INSERT INTO 
statement on the table aborts the Spark job due to an unhandled 
NullPointerException on executor workers.
   
   While VARIANT data type writes function as expected for Parquet-backed 
Iceberg tables, Iceberg's SparkOrcWriter lacks type mapping logic for VARIANT. 
During ORC schema visitor traversal (OrcSchemaWithTypeVisitor.visitVariant), 
primitive type resolution returns null, causing a task crash.
   
   **Environment**
   ```
   Engine: Apache Spark 4.1
   Catalog / Format: Apache Iceberg v3 (REST Catalog / Polaris)
   Write Format: ORC ('write.format.default' = 'orc')
   ```
   
   **Steps to reproduce:**
   ```
   -- 1. Create an Iceberg v3 table with ORC write format
   CREATE TABLE ds2_standalone.iceberg_v3_qe.test_variant_orc (
       id INT,
       payload VARIANT
   ) 
   USING iceberg 
   TBLPROPERTIES (
       'format-version' = '3',
       'write.format.default' = 'orc'
   );
   
   -- 2. Attempt to insert VARIANT data into the ORC table
   INSERT INTO ds2_standalone.iceberg_v3_qe.test_variant_orc 
   VALUES (1, parse_json('{"key": "value"}'));
   ```
   
   **Actual Behavior**
   CREATE TABLE succeeds, but INSERT INTO fails with a stage failure due to a 
repeating NullPointerException on all task retries:
   ```
   26/10/05 16:48:15 INFO TaskSchedulerImpl: Killing all running tasks in stage 
0: Job aborted due to stage failure: Task 0 in stage 0.0 failed 4 times, most 
recent failure: Lost task 0.3 in stage 0.0 (TID 3) (10.233.121.170 executor 2): 
java.lang.NullPointerException: Cannot invoke 
"org.apache.iceberg.types.Type$PrimitiveType.typeId()" because "iPrimitive" is 
null
        at 
org.apache.iceberg.spark.data.SparkOrcWriter$WriteBuilder.primitive(SparkOrcWriter.java:116)
        at 
org.apache.iceberg.spark.data.SparkOrcWriter$WriteBuilder.primitive(SparkOrcWriter.java:73)
        at 
org.apache.iceberg.orc.OrcSchemaWithTypeVisitor.visit(OrcSchemaWithTypeVisitor.java:66)
        at 
org.apache.iceberg.orc.OrcSchemaWithTypeVisitor.visitVariant(OrcSchemaWithTypeVisitor.java:94)
        at 
org.apache.iceberg.orc.OrcSchemaWithTypeVisitor.visit(OrcSchemaWithTypeVisitor.java:42)
        at 
org.apache.iceberg.orc.OrcSchemaWithTypeVisitor.visitRecord(OrcSchemaWithTypeVisitor.java:78)
        at 
org.apache.iceberg.orc.OrcSchemaWithTypeVisitor.visit(OrcSchemaWithTypeVisitor.java:44)
        at 
org.apache.iceberg.orc.OrcSchemaWithTypeVisitor.visit(OrcSchemaWithTypeVisitor.java:33)
        at 
org.apache.iceberg.spark.data.SparkOrcWriter.<init>(SparkOrcWriter.java:54)
        at 
org.apache.iceberg.spark.source.SparkFormatModels.lambda$register$4(SparkFormatModels.java:71)
        at 
org.apache.iceberg.orc.ORCFormatModel$WriteBuilderWrapper.lambda$build$0(ORCFormatModel.java:175)
        at 
org.apache.iceberg.orc.OrcFileAppender.newOrcRowWriter(OrcFileAppender.java:178)
        at 
org.apache.iceberg.orc.OrcFileAppender.<init>(OrcFileAppender.java:93)
        at org.apache.iceberg.orc.ORC$WriteBuilder.build(ORC.java:222)
        at 
org.apache.iceberg.orc.ORCFormatModel$WriteBuilderWrapper.build(ORCFormatModel.java:205)
        at 
org.apache.iceberg.formats.FileWriterBuilderImpl$DataFileWriterBuilder.build(FileWriterBuilderImpl.java:231)
        at 
org.apache.iceberg.formats.FileWriterBuilderImpl$DataFileWriterBuilder.build(FileWriterBuilderImpl.java:219)
        at 
org.apache.iceberg.data.RegistryBasedFileWriterFactory.newDataWriter(RegistryBasedFileWriterFactory.java:121)
        at 
org.apache.iceberg.io.RollingDataWriter.newWriter(RollingDataWriter.java:52)
        at 
org.apache.iceberg.io.RollingDataWriter.newWriter(RollingDataWriter.java:32)
        at 
org.apache.iceberg.io.RollingFileWriter.openCurrentWriter(RollingFileWriter.java:112)
        at 
org.apache.iceberg.io.RollingDataWriter.<init>(RollingDataWriter.java:47)
        at 
org.apache.iceberg.spark.source.SparkWrite$UnpartitionedDataWriter.<init>(SparkWrite.java:796)
        at 
org.apache.iceberg.spark.source.SparkWrite$WriterFactory.createWriter(SparkWrite.java:766)
        at 
org.apache.iceberg.spark.source.SparkWrite$WriterFactory.createWriter(SparkWrite.java:740)
        at 
org.apache.spark.sql.execution.datasources.v2.WritingSparkTask.run(WriteToDataSourceV2Exec.scala:524)
        at 
org.apache.spark.sql.execution.datasources.v2.WritingSparkTask.run$(WriteToDataSourceV2Exec.scala:513)
        at 
org.apache.spark.sql.execution.datasources.v2.DataWritingSparkTask$.run(WriteToDataSourceV2Exec.scala:631)
        at 
org.apache.spark.sql.execution.datasources.v2.V2TableWriteExec.$anonfun$writeWithV2$2(WriteToDataSourceV2Exec.scala:454)
        at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:93)
        at 
org.apache.spark.TaskContext.runTaskWithListeners(TaskContext.scala:180)
        at org.apache.spark.scheduler.Task.run(Task.scala:147)
        at 
org.apache.spark.executor.Executor$TaskRunner.$anonfun$run$5(Executor.scala:716)
        at 
org.apache.spark.util.SparkErrorUtils.tryWithSafeFinally(SparkErrorUtils.scala:86)
        at 
org.apache.spark.util.SparkErrorUtils.tryWithSafeFinally$(SparkErrorUtils.scala:83)
        at org.apache.spark.util.Utils$.tryWithSafeFinally(Utils.scala:97)
        at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:719)
        at 
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
        at 
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
        at java.base/java.lang.Thread.run(Thread.java:840)
   
   Driver stacktrace:
   26/10/05 16:48:15 INFO DAGScheduler: ResultStage 0 (sql at 
NativeMethodAccessorImpl.java:0) failed in 4405 ms due to Job aborted due to 
stage failure: Task 0 in stage 0.0 failed 4 times, most recent failure: Lost 
task 0.3 in stage 0.0 (TID 3) (10.233.121.170 executor 2): 
java.lang.NullPointerException: Cannot invoke 
"org.apache.iceberg.types.Type$PrimitiveType.typeId()" because "iPrimitive" is 
null
        at 
org.apache.iceberg.spark.data.SparkOrcWriter$WriteBuilder.primitive(SparkOrcWriter.java:116)
        at 
org.apache.iceberg.spark.data.SparkOrcWriter$WriteBuilder.primitive(SparkOrcWriter.java:73)
        at 
org.apache.iceberg.orc.OrcSchemaWithTypeVisitor.visit(OrcSchemaWithTypeVisitor.java:66)
        at 
org.apache.iceberg.orc.OrcSchemaWithTypeVisitor.visitVariant(OrcSchemaWithTypeVisitor.java:94)
        at 
org.apache.iceberg.orc.OrcSchemaWithTypeVisitor.visit(OrcSchemaWithTypeVisitor.java:42)
        at 
org.apache.iceberg.orc.OrcSchemaWithTypeVisitor.visitRecord(OrcSchemaWithTypeVisitor.java:78)
        at 
org.apache.iceberg.orc.OrcSchemaWithTypeVisitor.visit(OrcSchemaWithTypeVisitor.java:44)
        at 
org.apache.iceberg.orc.OrcSchemaWithTypeVisitor.visit(OrcSchemaWithTypeVisitor.java:33)
        at 
org.apache.iceberg.spark.data.SparkOrcWriter.<init>(SparkOrcWriter.java:54)
        at 
org.apache.iceberg.spark.source.SparkFormatModels.lambda$register$4(SparkFormatModels.java:71)
        at 
org.apache.iceberg.orc.ORCFormatModel$WriteBuilderWrapper.lambda$build$0(ORCFormatModel.java:175)
        at 
org.apache.iceberg.orc.OrcFileAppender.newOrcRowWriter(OrcFileAppender.java:178)
        at 
org.apache.iceberg.orc.OrcFileAppender.<init>(OrcFileAppender.java:93)
        at org.apache.iceberg.orc.ORC$WriteBuilder.build(ORC.java:222)
        at 
org.apache.iceberg.orc.ORCFormatModel$WriteBuilderWrapper.build(ORCFormatModel.java:205)
        at 
org.apache.iceberg.formats.FileWriterBuilderImpl$DataFileWriterBuilder.build(FileWriterBuilderImpl.java:231)
        at 
org.apache.iceberg.formats.FileWriterBuilderImpl$DataFileWriterBuilder.build(FileWriterBuilderImpl.java:219)
        at 
org.apache.iceberg.data.RegistryBasedFileWriterFactory.newDataWriter(RegistryBasedFileWriterFactory.java:121)
        at 
org.apache.iceberg.io.RollingDataWriter.newWriter(RollingDataWriter.java:52)
        at 
org.apache.iceberg.io.RollingDataWriter.newWriter(RollingDataWriter.java:32)
        at 
org.apache.iceberg.io.RollingFileWriter.openCurrentWriter(RollingFileWriter.java:112)
        at 
org.apache.iceberg.io.RollingDataWriter.<init>(RollingDataWriter.java:47)
        at 
org.apache.iceberg.spark.source.SparkWrite$UnpartitionedDataWriter.<init>(SparkWrite.java:796)
        at 
org.apache.iceberg.spark.source.SparkWrite$WriterFactory.createWriter(SparkWrite.java:766)
        at 
org.apache.iceberg.spark.source.SparkWrite$WriterFactory.createWriter(SparkWrite.java:740)
        at 
org.apache.spark.sql.execution.datasources.v2.WritingSparkTask.run(WriteToDataSourceV2Exec.scala:524)
        at 
org.apache.spark.sql.execution.datasources.v2.WritingSparkTask.run$(WriteToDataSourceV2Exec.scala:513)
        at 
org.apache.spark.sql.execution.datasources.v2.DataWritingSparkTask$.run(WriteToDataSourceV2Exec.scala:631)
        at 
org.apache.spark.sql.execution.datasources.v2.V2TableWriteExec.$anonfun$writeWithV2$2(WriteToDataSourceV2Exec.scala:454)
        at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:93)
        at 
org.apache.spark.TaskContext.runTaskWithListeners(TaskContext.scala:180)
        at org.apache.spark.scheduler.Task.run(Task.scala:147)
        at 
org.apache.spark.executor.Executor$TaskRunner.$anonfun$run$5(Executor.scala:716)
        at 
org.apache.spark.util.SparkErrorUtils.tryWithSafeFinally(SparkErrorUtils.scala:86)
        at 
org.apache.spark.util.SparkErrorUtils.tryWithSafeFinally$(SparkErrorUtils.scala:83)
        at org.apache.spark.util.Utils$.tryWithSafeFinally(Utils.scala:97)
        at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:719)
        at 
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
        at 
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
        at java.base/java.lang.Thread.run(Thread.java:840)
   ```
   
   ### Willingness to contribute
   
   - [ ] I can contribute a fix for this bug independently
   - [ ] I would be willing to contribute a fix for this bug with guidance from 
the Iceberg community
   - [x] I cannot contribute a fix for this bug at this time


-- 
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