You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 00:49:53