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

  1. Verify the column's physical type is DOUBLE before calling writeDouble.
  2. Override writeDouble in custom TripleWriter implementations for DOUBLE columns.
  3. 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

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)