Pyspark中如何正确导入Hudi模块?解决org模块不存在报错
问题解决方案
错误根因
你使用了Scala环境下的Hudi类导入语法,Pyspark是Python运行环境,无法直接识别JVM侧的org.apache.hudi包路径,因此抛出ModuleNotFoundError: No module named 'org'错误。
修复步骤
1. 启动Pyspark时绑定Hudi依赖
启动Pyspark时需要加载对应版本的Hudi依赖包,示例启动命令:
pyspark --packages org.apache.hudi:hudi-spark3.3-bundle_2.12:0.12.3 \ --conf "spark.serializer=org.apache.spark.serializer.KryoSerializer" \ --conf "spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension"
请将命令中的Hudi版本、Spark适配版本、Scala版本替换为与你当前环境匹配的版本
2. 正确调用Hudi能力
Pyspark环境下通常不需要显式导入Hudi类,所有配置参数可以直接以字符串形式传入,示例代码如下:
写Hudi表
hudi_options = { "hoodie.table.name": "test_table", "hoodie.datasource.write.recordkey.field": "id", "hoodie.datasource.write.partitionpath.field": "partition_date", "hoodie.datasource.write.precombine.field": "update_time", "hoodie.datasource.write.operation": "upsert" } # df为待写入的DataFrame df.write.format("hudi")\ .options(**hudi_options)\ .mode("append")\ .save("/user/hudi/test_table")
读Hudi表
read_df = spark.read.format("hudi")\ .load("/user/hudi/test_table")
如果有需求要直接调用Hudi官方定义的常量类,可以通过Spark的JVM桥接对象获取,示例如下:
# 前提是启动时已经加载了Hudi依赖包 DataSourceWriteOptions = spark._jvm.org.apache.hudi.DataSourceWriteOptions DataSourceReadOptions = spark._jvm.org.apache.hudi.DataSourceReadOptions HoodieWriteConfig = spark._jvm.org.apache.hudi.config.HoodieWriteConfig
内容的提问来源于stack exchange,提问作者codek
相关产品推荐
相关产品推荐

