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

PySpark连接SQLServer v.16报ClassNotFoundException问题求助

解决PySpark 3.4.0连接SQL Server的ClassNotFoundException问题

核心问题分析

你遇到的ClassNotFoundException主要源于三个错误:

  • 版本不兼容:你下载的spark-mssql-connector_2.11_2.4-1.0.2.jar适配的是Scala 2.11 + Spark 2.4,而你的环境是Spark 3.4.0(默认适配Scala 2.12),版本完全不匹配。
  • Driver类名错误:com.microsoft.sqlserver.jdbc.spark不是正确的JDBC驱动类名,官方SQL Server JDBC驱动类应为com.microsoft.sqlserver.jdbc.SQLServerDriver;若使用Spark专用连接器,需将format指定为com.microsoft.sqlserver.jdbc.spark,而非在driver参数中填写该值。
  • 类路径配置错误:本地模式下应优先配置spark.driver.extraClassPath而非仅spark.executor.extraClassPath,且你的路径中bin- hadoop3存在空格,会导致路径识别失败。

修复步骤

1. 下载适配的连接器

获取适配Spark 3.4.0 + Scala 2.12版本的SQL Server连接器,比如spark-mssql-connector_2.12_3.0-1.2.0.jar(以官方最新兼容版本为准)。

2. 正确存放Jar文件

有两种可选方式:

  • 方式一:放入Spark默认jars目录
    将jar文件直接复制到Spark安装目录下的jars文件夹(例如C:/Spark/spark-3.4.0-bin-hadoop3/jars/),Spark启动时会自动加载该目录下的所有jar包,无需额外配置类路径。
  • 方式二:代码中指定类路径
    若不想修改Spark目录,可在初始化SparkSession时配置spark.driver.extraClassPath(本地模式下driver与executor共用该配置),注意路径不能有空格:
    .config('spark.driver.extraClassPath', 'C:/Spark/spark-3.4.0-bin-hadoop3/jars/spark-mssql-connector_2.12_3.0-1.2.0.jar')
    

3. 修正连接代码

以下是修复后的完整代码,两种连接方式二选一:

from pyspark.sql import SparkSession

# 初始化SparkSession
spark = SparkSession\
.builder\
.master('local[*]')\
.appName('Connection-Test')\
# 若jar已放入jars目录,可注释此行
.config('spark.driver.extraClassPath', 'C:/Spark/spark-3.4.0-bin-hadoop3/jars/spark-mssql-connector_2.12_3.0-1.2.0.jar')\
.getOrCreate()

# SQL Server连接参数
sqlsUrl = 'jdbc:sqlserver://Server_IP:1433;database=Master'
qryStr = """ (
SELECT *
FROM dbo.table1
) t """

# 方式一:使用标准JDBC驱动读取
spark.read.format('jdbc')\
.option('url', sqlsUrl)\
.option('driver', 'com.microsoft.sqlserver.jdbc.SQLServerDriver')\
.option('dbtable', qryStr)\
.option("user", "user_name")\
.option("password", "password")\
.load().show()

# 方式二:使用Spark专用连接器读取(需确保jar版本匹配)
# spark.read.format('com.microsoft.sqlserver.jdbc.spark')\
# .option('url', sqlsUrl)\
# .option('dbtable', qryStr)\
# .option("user", "user_name")\
# .option("password", "password")\
# .load().show()

4. 后续上传SharePoint的参考逻辑

若要将读取的数据上传至SharePoint,可先将PySpark DataFrame转换为pandas DataFrame,再通过office365-rest-python-client库操作(先执行pip install office365-rest-python-client安装):

# PySpark DataFrame转pandas DataFrame
pandas_df = spark_df.toPandas()

# 连接SharePoint并上传示例
from office365.sharepoint.client_context import ClientContext
from office365.runtime.auth.user_credential import UserCredential

ctx = ClientContext("https://你的SharePoint站点地址").with_credentials(UserCredential("用户名", "密码"))
target_list = ctx.web.lists.get_by_title("目标列表名称")

# 遍历数据行添加至SharePoint列表
for _, row in pandas_df.iterrows():
    target_list.add_item({
        "Title": row["对应列表字段1"],
        "其他字段名": row["对应列表字段2"]
    })
ctx.execute_query()

内容的提问来源于stack exchange,提问作者Kamakshi Sharma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 18:05:34