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文件写入类进行写入。