apache/iceberg · error · UnsupportedOperationException
Unsupported type: double
Error message
Unsupported type: double
What it means
The base ArrowVectorAccessor.getDouble(int) is an unimplemented stub that always throws. Double (float8) accessors must override it; calling the base means the accessor instance cannot read doubles. toFloat8Vector in the vectorized read path depends on the override.
Source
Thrown at arrow/src/main/java/org/apache/iceberg/arrow/vectorized/ArrowVectorAccessor.java:69
public boolean getBoolean(int rowId) {
throw new UnsupportedOperationException("Unsupported type: boolean");
}
public int getInt(int rowId) {
throw new UnsupportedOperationException("Unsupported type: int");
}
public long getLong(int rowId) {
throw new UnsupportedOperationException("Unsupported type: long");
}
public float getFloat(int rowId) {
throw new UnsupportedOperationException("Unsupported type: float");
}
public double getDouble(int rowId) {
throw new UnsupportedOperationException("Unsupported type: double");
}
public byte[] getBinary(int rowId) {
throw new UnsupportedOperationException("Unsupported type: binary");
}
public DecimalT getDecimal(int rowId, int precision, int scale) {
throw new UnsupportedOperationException("Unsupported type: decimal");
}
public Utf8StringT getUTF8String(int rowId) {
throw new UnsupportedOperationException("Unsupported type: UTF8String");
}
public ArrayT getArray(int rowId) {
throw new UnsupportedOperationException("Unsupported type: array");
}
View on GitHub (pinned to 86d9c8fc54)
Solutions
- Dispatch Float8Vector to an accessor overriding getDouble (return vector.get(rowId)).
- Add the @Override getDouble to your subclass.
- Fall back to non-vectorized reads if accessor wiring cannot be fixed immediately.
Example fix
// before
class MyAccessor extends ArrowVectorAccessor<Float8Vector> { } // getDouble missing
// after
@Override public double getDouble(int rowId) { return vector.get(rowId); } Defensive patterns
Strategy: type-guard
Validate before calling
if (!(accessor instanceof DoubleAccessor)) { /* fallback */ } Type guard
static boolean supportsDouble(ArrowVectorAccessor<?> a) {
return a.getClass() != ArrowVectorAccessor.class;
} Try / catch
try {
double v = accessor.getDouble(rowId);
} catch (UnsupportedOperationException e) {
if ("Unsupported type: double".equals(e.getMessage())) { fallbackRead(rowId); } else { throw e; }
} Prevention
- Map Float8Vector fields to double-capable accessors.
- Override getDouble in subclasses.
- Include double columns in accessor factory regression tests.
When it happens
Trigger: Reading a double column via an accessor that lacks the getDouble override — mis-mapped vector type in the accessor factory or base-class instantiation.
Common situations: Custom vectorized readers converting to engine double vectors; subclasses authored without a double override; new Arrow double vector types not routed correctly.
Related errors
- Cannot read unsupported column types:
- Unsupported type: boolean
- Unsupported type: int
- Unsupported type: long
- Unsupported type: float
AI-assisted analysis of apache/iceberg@86d9c8fc54 (2026-09-12).
Data as JSON: /api/errors/aa4a9b200ca5734e.
Report an issue: GitHub.