使用Windows身份验证为pyspark配置SQL Server JDBC连接

3

我想问一下如何使用Windows身份验证连接SQL Server和pyspark库, 我可以通过Microsoft SQL Server Management Studio进行连接,但在尝试使用Spark编写Python代码时不能连接。以下是我迄今为止尝试过的。

from pyspark.sql import SparkSession

spark = SparkSession \
    .builder \
    .appName("Python Spark SQL basic example") \
    .config("spark.driver.extraClassPath","mssql-jdbc-6.4.0.jre8.jar") \
    .getOrCreate()

mssql_df = spark.read.format("jdbc") \
    .option("url", "jdbc:sqlserver://localhost:1433;databaseName=DATABASE-NAME") \
    .option("dbtable", "database-table-name") \
    .option("user", "Windows-Username") \
    .option("password", "Windows-Pass")\
    .option("driver", 'com.mysql.jdbc.Driver').load()

mssql_df.printSchema()
mssql_df.show()

结果是:py4j.protocol.Py4JJavaError:调用o39.load时发生错误。 - Renos Bardhis
1个回答

3
根据此处所示,您可以设置integratedSecurity=true通过jdbc和Windows身份验证连接到SQL Server。然后,Spark配置应如下所示:
mssql_df = spark.read.format("jdbc") \
    .option("url", "jdbc:sqlserver://localhost:1433;databaseName=DATABASE-NAME;integratedSecurity=true") \
    .option("dbtable", "database-table-name") \
    .option("driver", "com.microsoft.sqlserver.jdbc.SQLServerDriver") \
    .load()

更新:

如评论中所讨论,用户应将sqljdbc_auth.dll放置在与mssql-jdbc-7.4.1.jre12.jar相同的文件夹中,或者只需设置spark.driver.extraClassPath,将两个jar以冒号分隔,如下所示:

.config("spark.driver.extraClassPath","/path.to/mssql-jdbc-6.4.0.jre8.jar:/path/to/sqljdbc_auth.dll")

sqljdbc_auth.dll是微软JDBC驱动程序6.0 for SQL Server的一部分,您可以从此处下载它。或者,您可以在系统上安装JDBC驱动程序,并指定存储dll的路径。

“最初的回答”翻译为:"Original Answer"


现在我有另一个问题。问题现在位于SparkSession上。在.config("spark.driver.extraClassPath", "mssql-jdbc-7.4.1.jre12.jar").引发了一个问题: FileNotFoundError:[WinError 2]系统找不到指定的文件我该如何解决这个问题? - Renos Bardhis
我尝试了不同的方法,但是每次都出现相同的错误:当我使用命令df.count()时,会出现pyspark.sql.utils.IllegalArgumentException: 'Unsupported class file major version 56。我真的不知道还能做什么。 - Renos Bardhis
你能发布完整的错误信息吗?这两个问题似乎没有关联。 - abiratsis
你不能这样做,也许你应该创建一个新的问题? - abiratsis
让我们在聊天中继续这个讨论 - abiratsis
显示剩余16条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接