更新时间:2022-12-14 GMT+08:00

Hudi写入小精度Decimal数据失败

问题

Hudi表初始入库采用BULK_INSERT方式入库含有Decimal类型的数据,之后执行upsert,数据写入时报错:

java.lang.UnsupportedOperationException: org.apache.parquet.avro.AvroConverters$FieldFixedConverter

回答

原因:

Hudi表数据含有Decimal类型数据。

初始入库BULK_INSET方式会使用Spark内部parquet文件的写入类进行写入,Spark对不同精度的Decimal类型处理是不同的。

UPSERT操作时,Hudi使用Avro兼容的parquet文件写入类进行写入,这个和Spark的写入方式是不兼容的。

解决方案:

执行BULK_INSERT时指定设置“hoodie.datasource.write.row.writer.enable = false”,使hoodie采用Avro兼容的parquet文件写入类进行写入。