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
相关产品推荐
相关产品推荐

