{"record":{"id":"ced0cc11bff5d2bf","repo":"apache/iceberg","slug":"unsupported-task-group-for-columnar-reads-par","errorCode":null,"errorMessage":"Unsupported task group for columnar reads: \" + partition.taskGroup()","messagePattern":"Unsupported task group for columnar reads: \" \\+ partition\\.taskGroup\\(\\)","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"spark/v4.1/spark/src/main/java/org/apache/iceberg/spark/source/SparkColumnarReaderFactory.java","lineNumber":62,"sourceCode":"\n  @Override\n  public PartitionReader<InternalRow> createReader(InputPartition inputPartition) {\n    throw new UnsupportedOperationException(\"Row-based reads are not supported\");\n  }\n\n  @Override\n  public PartitionReader<ColumnarBatch> createColumnarReader(InputPartition inputPartition) {\n    Preconditions.checkArgument(\n        inputPartition instanceof SparkInputPartition,\n        \"Unknown input partition type: %s\",\n        inputPartition.getClass().getName());\n\n    SparkInputPartition partition = (SparkInputPartition) inputPartition;\n\n    if (partition.allTasksOfType(FileScanTask.class)) {\n      return new BatchDataReader(partition, parquetConf, orcConf);\n    } else {\n      throw new UnsupportedOperationException(\n          \"Unsupported task group for columnar reads: \" + partition.taskGroup());\n    }\n  }\n\n  @Override\n  public boolean supportColumnarReads(InputPartition inputPartition) {\n    return true;\n  }\n}\n","sourceCodeStart":44,"sourceCodeEnd":72,"githubUrl":"https://github.com/apache/iceberg/blob/86d9c8fc543e7c56c9f624eb725f76c9baff9570/spark/v4.1/spark/src/main/java/org/apache/iceberg/spark/source/SparkColumnarReaderFactory.java#L44-L72","documentation":"SparkColumnarReaderFactory.createColumnarReader throws UnsupportedOperationException when the input partition's task group is not composed entirely of FileScanTask, since columnar batch reading only handles file scan tasks.","triggerScenarios":"A SparkInputPartition whose taskGroup contains non-FileScanTask tasks (e.g. changelog or metadata tasks) reaches createColumnarReader.","commonSituations":"Reading changelog/streaming scans columnar-ly; mixed task groups after internal scan changes; custom scan task types.","solutions":["Ensure the read uses batch FileScanTask-based scans, not changelog tasks","Check supportColumnarReads gating — do not force columnar reads for such partitions","Use the row/changelog reader path instead","Align Iceberg versions if task types changed internally"],"exampleFix":null,"handlingStrategy":"type-guard","validationCode":"if (!partition.allTasksOfType(FileScanTask.class)) { /* use row-based/changelog reader instead */ }","typeGuard":"boolean isColumnarReadable(SparkInputPartition p) { return p.allTasksOfType(FileScanTask.class); }","tryCatchPattern":"try { createColumnarReader(partition); } catch (UnsupportedOperationException e) { /* fall back to row-based reader */ }","preventionTips":["Only enable columnar reads for pure file-scan task groups","Respect supportColumnarReads gating in custom readers"],"tags":["spark","iceberg","columnar","task-group"],"backgroundTag":"incompatible-source-type","analyzedSha":"86d9c8fc543e7c56c9f624eb725f76c9baff9570","analyzedAt":"2026-09-12T00:46:39.097Z","contentChangedAt":"2026-09-12T00:46:39.097Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}