Mac系统下Pyspark 2.4.6读取AzureSQL报No suitable driver问题求助
问题原因
- 缺少MSSQL官方JDBC驱动依赖:Spark MSSQL连接器仅为Spark的适配封装层,本身不内置SQL Server的JDBC驱动,需要额外引入对应版本的驱动包,适配你使用的Java 8环境需要选择支持JRE8的mssql-jdbc版本。
- JDBC URL参数不符合规范:当前代码中URL拼接使用的
database_name为错误参数名,SQL Server JDBC规范的数据库名参数为databaseName。 - 未显式声明JDBC驱动类:部分场景下Spark无法自动扫描加载到JDBC驱动类,需要手动指定驱动类路径。
修复步骤
- 准备适配JRE8版本的mssql-jdbc驱动jar包,和已有的
spark-mssql-connector_2.11_2.4-1.0.2.jar放置在本地同一目录下。 - 修改pyspark启动命令,同时加载两个依赖jar包:
pyspark --jars spark-mssql-connector_2.11_2.4-1.0.2.jar,mssql-jdbc-8.4.1.jre8.jar
- 调整业务代码,修正URL参数并新增驱动类声明:
dbname = "db-test" servername = "jdbc:sqlserver://samplesql.database.windows.net:1433" # 修正数据库名参数为符合规范的databaseName url = f"{servername};databaseName={dbname};" df = spark.read.format("com.microsoft.sqlserver.jdbc.spark") \ .option("url", url) \ .option("dbtable", table_name) \ .option("authentication", "ActiveDirectoryPassword") \ .option("hostNameInCertificate", "*.database.windows.net") \ .option("user", aduser) \ .option("password", adpwd) \ .option("encrypt", "true") \ # 显式指定SQL Server JDBC驱动类 .option("driver", "com.microsoft.sqlserver.jdbc.SQLServerDriver") \ .load()
如果执行后仍报错,可检查启动命令中两个jar包的本地路径是否正确,当前系统用户是否有jar包的读取权限。
内容的提问来源于stack exchange,提问作者Appden65
相关产品推荐
相关产品推荐

