PySpark写入Hudi表报错:无法加载ComplexKeyGenerator类,如何调整代码?
解决Hudi写入时
ComplexKeyGenerator加载失败的问题 报错原因
指定的org.apache.hudi.keygen.ComplexKeyGenerator类在当前Hudi版本中不存在,通常是版本迭代后该类被移动、重命名或废弃导致。
调整方案
根据你的实际场景选择以下任意一种方案:
方案1:使用默认单键生成器(推荐,当前场景适用)
你的record key仅为单个字段id,无需使用复杂键生成器,直接移除hoodie.datasource.write.keygenerator.class配置项即可,Hudi会自动使用SimpleKeyGenerator处理单字段主键。修改后的代码:
hudi_options = { 'hoodie.datasource.hive_sync.database': 'dingpan_test_mrs', 'hoodie.table.name': 'dwd_design_designasset_function_offline_wide', 'hoodie.datasource.write.table.name': 'dwd_design_designasset_function_offline_wide', 'hoodie.datasource.write.recordkey.field':'id', 'hoodie.datasource.write.precombine.field': 'modified_date', 'hoodie.datasource.write.table.type':'COPY_ON_WRITE', 'hoodie.datasource.write.operation': 'upsert', 'hoodie.upsert.shuffle.parallelism': 1, 'hoodie.insert.shuffle.parallelism': 1 } new_data.write .format("hudi") .options(**hudi_options) .mode("append") .save(obs_path)
也可以显式指定单键生成器类,效果一致:
hudi_options = { 'hoodie.datasource.write.keygenerator.class':'org.apache.hudi.keygen.SimpleKeyGenerator', # 其余配置保持不变 ... }
方案2:使用兼容版本的复杂键生成器(如需多字段主键)
如果后续需要将多个字段作为record key,需根据Hudi版本替换为对应类:
- Hudi 0.10+版本:使用
org.apache.hudi.keygen.ComplexAvroKeyGenerator - 旧版本(0.10以下):若确认依赖包包含原类,可保留
ComplexKeyGenerator,但建议升级Hudi版本并使用新类。
修改示例(Hudi 0.10+):
hudi_options = { 'hoodie.datasource.write.keygenerator.class':'org.apache.hudi.keygen.ComplexAvroKeyGenerator', # 其余配置保持不变 ... }
内容的提问来源于stack exchange,提问作者lysqlq
相关产品推荐
相关产品推荐

