{"record":{"id":"b32a543120358b2d","repo":"apache/iceberg","slug":"unsupported-task-group-for-columnar-reads-parti-b32a54","errorCode":null,"errorMessage":"Unsupported task group for columnar reads: ${partition.taskGroup()}","messagePattern":"Unsupported task group for columnar reads: (.+?)","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"spark/v4.2/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.2/spark/src/main/java/org/apache/iceberg/spark/source/SparkColumnarReaderFactory.java#L44-L72","documentation":"createColumnarReader can only build a BatchDataReader when every task in the input partition is a FileScanTask. If the partition's task group contains other task types (e.g. tasks from metadata scans or mixed groups that lack per-file columnar metadata), columnar reading is impossible and the factory throws UnsupportedOperationException naming the offending task group.","triggerScenarios":"Calling createColumnarReader with a SparkInputPartition whose taskGroup() is not all FileScanTask (e.g. a metadata-file scan task group, or mixed DeleteFile/FileScanTask groups) while supportColumnarReads was overridden or bypassed.","commonSituations":"Query plans that include metadata-table scans (refs, entries, files) routed to the columnar factory; custom batch execution frameworks that don't consult supportColumnarReads before dispatching; mixed batch/stream task groups.","solutions":["Check partition.allTasksOfType(FileScanTask.class) before requesting columnar reads and fall back to a non-columnar reader otherwise","Honor supportColumnarReads(inputPartition) in the execution layer and use a row-based factory when it returns false","Restrict columnar batch reads to pure data-file scans; handle metadata-table scans separately"],"exampleFix":"// before\nreturn factory.createColumnarReader(partition);\n// after\nif (partition.allTasksOfType(FileScanTask.class)) {\n  return factory.createColumnarReader(partition);\n} else {\n  return rowFactory.createReader(partition);\n}","handlingStrategy":"validation","validationCode":"Preconditions.checkState(partition.allTasksOfType(FileScanTask.class),\n    \"Columnar reads require all FileScanTask, got: \" + partition.taskGroup());","typeGuard":"boolean columnarCapable = partition.allTasksOfType(FileScanTask.class);","tryCatchPattern":"try {\n  return factory.createColumnarReader(partition);\n} catch (UnsupportedOperationException e) {\n  return rowFactory.createReader(partition);\n}","preventionTips":["Check allTasksOfType(FileScanTask.class) before columnar dispatch","Handle metadata-table scans with a row-based reader","Respect supportColumnarReads(inputPartition) in execution code"],"tags":["spark","columnar-read","task-group"],"backgroundTag":"unsupported-operation","analyzedSha":"86d9c8fc543e7c56c9f624eb725f76c9baff9570","analyzedAt":"2026-09-12T00:46:39.097Z","contentChangedAt":"2026-09-12T00:46:39.097Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}