从Databricks Notebook写入DataFrame到Azure SQL数据库遇数据源错误
解决Databricks写入Azure SQL时的
DATA_SOURCE_NOT_FOUND错误 错误原因
你遇到的org.apache.spark.SparkClassNotFoundException: [DATA_SOURCE_NOT_FOUND] Failed to find data source: com.microsoft.sqlserver.jdbc.spark错误,核心问题是:
- 你当前加载的是MySQL数据库驱动(
mysql-connector-java-6.0.6.jar),但连接Azure SQL需要的是微软Spark SQL Server专用连接器 - 指定的数据源
com.microsoft.sqlserver.jdbc.spark没有对应的驱动支持,导致Spark无法识别该数据源类型
解决方案
1. 安装正确的SQL Server Spark连接器
在Databricks中,推荐优先用集群级安装方式,避免代码重复配置:
- 打开你的Databricks集群页面,切换到
Libraries标签 - 点击
Install New,选择Maven作为库源 - 在
Coordinates输入框中填入对应版本的连接器坐标(示例适配Databricks Runtime 10.0+):com.microsoft.azure:spark-mssql-connector_2.12:1.2.0 - 点击
Install,等待集群完成库加载
如果需要临时在代码中指定,可修改SparkSession配置,自动从Maven拉取依赖:
from pyspark.sql import SparkSession spark = SparkSession.builder.appName('SparkByExamples.com')\ .config("spark.jars.packages", "com.microsoft.azure:spark-mssql-connector_2.12:1.2.0")\ .getOrCreate()
2. 验证写入代码
你的写入代码格式无误,若要提升兼容性,也可以改用标准JDBC写法(需指定驱动类):
sampleDF.write.format("jdbc") \ .mode("overwrite") \ .option("url", "jdbc:sqlserver://sqlservername.database.windows.net;databaseName=sqldbname;encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30;") \ .option("dbtable", "df") \ .option("user", "***") \ .option("password", "***") \ .option("driver", "com.microsoft.sqlserver.jdbc.SQLServerDriver") \ .save()
若继续使用com.microsoft.sqlserver.jdbc.spark格式,确保连接器已正确加载即可。
额外检查项
- 确认Databricks集群网络能访问Azure SQL:比如在Azure SQL防火墙规则中添加集群公网IP,或配置VNet对等连接
- 连接器版本需与Databricks Runtime的Scala版本匹配(Runtime 10.x+默认用Scala 2.12)
内容的提问来源于stack exchange,提问作者Hiwot
相关产品推荐
相关产品推荐

