PySpark连接Nebula Graph失败求助:类未找到异常排查
问题排查与解决方案
核心错误原因
java.lang.NoClassDefFoundError: org/apache/spark/sql/sources/v2/ReadSupport 本质是Nebula Spark Connector版本与PySpark 3.5.2的API不兼容:
- Spark 3.5.x对SQL V2数据源API做了调整,
ReadSupport类的定义或路径发生变更; - 你使用的nebula-spark-connector-3.6.0基于旧版Spark(如3.3/3.4)编译,无法适配Spark 3.5的API变化。
另外,手动添加scala-library-2.12.18.jar会引发版本冲突——PySpark 3.5.2自带对应版本的Scala库,重复引入会导致类加载异常。
分步解决方案
1. 匹配Connector与Spark版本
选择适配Spark 3.5.x的Nebula Spark Connector版本(如3.7.0及以上,以官方兼容说明为准),替换当前的3.6.0 jar包。
2. 清理冗余依赖与配置
- 移除
nebula_jars中的scala-library-2.12.18.jar,依赖Spark自带的Scala库即可; - 简化SparkSession配置,删除重复的类路径配置:
def _initialize_spark_session(self): maven_packages = Postgres.get_packages() nebula_jars = [ "file:///d:/work/PyCharmProjects/edt-test-spark-sandbox/nebula-spark-connector/nebula-spark-common-3.7.0.jar", "file:///d:/work/PyCharmProjects/edt-test-spark-sandbox/nebula-spark-connector/nebula-spark-connector-3.7.0.jar" ] spark = ( SparkSession.builder.appName("edt_spark_transformation") .config("spark.jars", ",".join(nebula_jars)) .config("spark.jars.packages", ",".join(maven_packages)) .enableHiveSupport() .getOrCreate() ) return spark
3. 统一提交命令配置
提交命令无需重复指定Nebula jar包(已在代码中通过spark.jars配置),简化为:
spark-submit --packages org.postgresql:postgresql:42.2.19 product.py
若偏好通过命令行指定jar包,删除代码中的spark.jars配置,保留命令行的--jars参数即可。
4. 验证Nebula连接配置
确认metaAddress是Nebula集群的实际Meta服务地址——本地单节点环境通常为127.0.0.1:9559,而非metad0:9559(除非你配置了本地DNS解析)。
额外注意事项
- 临时目录删除失败的警告是次要问题,通常因Spark进程未完全释放文件锁导致,解决核心连接问题后可忽略,或手动清理临时目录;
- 确保Nebula集群处于运行状态,
basketballplayer空间、player标签已创建,权限配置正确。
内容的提问来源于stack exchange,提问作者Immelstrom
相关产品推荐
相关产品推荐

