apache/iceberg · error · UnsupportedOperationException
Not an double column
Error message
Not an double column
What it means
TripleWriter.writeDouble's default implementation throws 'Not an double column'. Only writers for DOUBLE-typed Parquet columns override it; invoking it on any other column's writer reaches the throwing default.
Solutions
- Verify the column's physical type is DOUBLE before calling writeDouble.
- Override writeDouble in custom TripleWriter implementations for DOUBLE columns.
- Regenerate writers after schema type changes so dispatch matches the physical type.
Example fix
// before writer.writeDouble(rl, value); // column is FLOAT // after writer.writeFloat(rl, (float) value); // or change the schema column to double
Defensive patterns
Strategy: type-guard
Validate before calling
boolean isDoubleColumn(ColumnDescriptor col) {
return col.getPrimitiveType().getPrimitiveTypeName() == PrimitiveTypeName.DOUBLE;
} Type guard
if (col.getPrimitiveType().getPrimitiveTypeName() == PrimitiveTypeName.DOUBLE) { writer.writeDouble(rl, value); } Prevention
- Call writeDouble only on DOUBLE-typed columns.
- Keep Iceberg schema and Parquet schema types aligned after evolution.
- Add per-type writer dispatch unit tests.
When it happens
Trigger: Calling column.writeDouble(rl, value) on a TripleWriter whose Parquet column is not DOUBLE (e.g. FLOAT, INT64).
Common situations: Writing Iceberg double values through a float/int column writer; custom TripleWriter subclasses lacking the writeDouble override; schema drift between Iceberg and Parquet schemas.
Understand the failure class
Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.
Related errors
AI-assisted analysis of apache/iceberg@86d9c8fc54 (2026-09-12).
Data as JSON: /api/errors/ad98b8464aa4d6f1.
Report an issue: GitHub.
Appendix: source
Thrown at parquet/src/main/java/org/apache/iceberg/parquet/TripleWriter.java:81
/**
* Write a triple.
*
* @param rl repetition level
* @param value the float value
*/
default void writeFloat(int rl, float value) {
throw new UnsupportedOperationException("Not an float column");
}
/**
* Write a triple.
*
* @param rl repetition level
* @param value the double value
*/
default void writeDouble(int rl, double value) {
throw new UnsupportedOperationException("Not an double column");
}
/**
* Write a triple.
*
* @param rl repetition level
* @param value the binary value
*/
default void writeBinary(int rl, Binary value) {
throw new UnsupportedOperationException("Not an binary column");
}
/**
* Write a triple for a null value.
*
* @param rl repetition level
* @param dl definition level
*/View on GitHub (pinned to 86d9c8fc54)