{"record":{"id":"f3d33e86520ff148","repo":"apache/beam","slug":"unsupported-floating-point-precision-type-getprecision-name","errorCode":null,"errorMessage":"Unsupported floating-point precision: ${type.getPrecision().name()}","messagePattern":"Unsupported floating-point precision: (.+?)","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"sdks/java/extensions/arrow/src/main/java/org/apache/beam/sdk/extensions/arrow/ArrowConversion.java","lineNumber":201,"sourceCode":"                      case 32:\n                        return FieldType.INT32;\n                      case 64:\n                        return FieldType.INT64;\n                      default:\n                        throw new IllegalArgumentException(\n                            \"Unsupported integer bit width: \" + type.getBitWidth());\n                    }\n                  }\n\n                  @Override\n                  public FieldType visit(ArrowType.FloatingPoint type) {\n                    switch (type.getPrecision()) {\n                      case SINGLE:\n                        return FieldType.FLOAT;\n                      case DOUBLE:\n                        return FieldType.DOUBLE;\n                      default:\n                        throw new IllegalArgumentException(\n                            \"Unsupported floating-point precision: \" + type.getPrecision().name());\n                    }\n                  }\n\n                  @Override\n                  public FieldType visit(ArrowType.Utf8 type) {\n                    return FieldType.STRING;\n                  }\n\n                  @Override\n                  public FieldType visit(ArrowType.Utf8View type) {\n                    throw new IllegalArgumentException(\n                        \"Type \\'\" + type.toString() + \"\\' not supported.\");\n                  }\n\n                  @Override\n                  public FieldType visit(ArrowType.Binary type) {\n                    return FieldType.BYTES;","sourceCodeStart":183,"sourceCodeEnd":219,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/java/extensions/arrow/src/main/java/org/apache/beam/sdk/extensions/arrow/ArrowConversion.java#L183-L219","documentation":"Thrown when converting an Arrow FloatingPoint type to a Beam FieldType and the precision is neither SINGLE nor DOUBLE (i.e. HALF float). Beam's schema model in this converter only supports 32-bit FLOAT and 64-bit DOUBLE.","triggerScenarios":"Converting an Arrow schema/VectorSchemaRoot containing a FloatingPoint type with precision FloatingPointPrecision.HALF (16-bit float) to a Beam Schema.","commonSituations":"Half-precision columns produced by ML pipelines (FP16 model weights/embeddings), or GPU-generated Arrow data, fed into a Beam ArrowIO pipeline.","solutions":["Change the Arrow column to FLOAT (SINGLE) or DOUBLE precision before conversion.","Pre-convert HALF floats to DOUBLE in the producer or with an Arrow compute cast.","Patch the visitor to map HALF to FieldType.FLOAT or DOUBLE (accepting precision loss) if upstream Beam does not support half floats."],"exampleFix":"// before\nField v = Field.nullable(\"v\", ArrowType.FloatingPoint.HALF);\n// after\nField v = Field.nullable(\"v\", ArrowType.FloatingPoint.DOUBLE); // SINGLE also works","handlingStrategy":"validation","validationCode":"for (Field f : schema.getFields()) {\n  if (f.getType() instanceof ArrowType.FloatingPoint\n      && ((ArrowType.FloatingPoint) f.getType()).getPrecision() == FloatingPointPrecision.HALF) {\n    throw new IllegalArgumentException(\n        \"Column \" + f.getName() + \" is HALF float; cast to SINGLE or DOUBLE before conversion\");\n  }\n}","typeGuard":"boolean isConvertibleFloat(ArrowType t) {\n  return t instanceof ArrowType.FloatingPoint\n      && ((ArrowType.FloatingPoint) t).getPrecision()\n          != FloatingPointPrecision.HALF;\n}","tryCatchPattern":"try {\n  Schema beamSchema = ArrowConversion.toBeamSchema(arrowSchema);\n} catch (IllegalArgumentException e) {\n  if (e.getMessage().startsWith(\"Unsupported floating-point precision\")) {\n    arrowSchema = castHalfToDouble(arrowSchema); // then retry\n  } else { throw e; }\n}","preventionTips":["Keep FP16 data outside Beam ingestion paths; cast to float/double at export time.","Document supported Arrow types for your pipeline and validate input files early.","Test conversion with a sample batch before running full pipelines."],"tags":["java","arrow","beam","float16","schema-conversion"],"backgroundTag":"unsupported-dtype","analyzedSha":"12126d8942aaf848030c478b4c6a28c6af861c66","analyzedAt":"2026-09-13T01:50:10.254Z","contentChangedAt":"2026-09-13T01:50:10.254Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}