使用 windows 身份验证 SQL 服务器 JDBC 与 pyspark

Using windows authentication for SQL Server JDBC with pyspark

我想问一下如何使用 Windows 身份验证连接 SQL 服务器和 pyspark 库?我可以与 Microsoft SQL Server Management Studio 连接,但当我尝试使用 spark.Here 迄今为止尝试过的代码在 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()

如图所示 here 您可以设置 integratedSecurity=true 通过 jdbc 和 Windows 身份验证连接到 SQL 服务器。

然后 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 所在的同一文件夹中,或者只为两个 jar 设置 spark.driver.extraClassPath,用 : 分隔,如下所示:

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

sqljdbc_auth.dll 是 SQL 服务器的 Microsoft JDBC Driver 6.0 的一部分,您可以从 here 下载它。或者,您可以在系统上安装 JDBC 驱动程序并指定存储 dll 的路径。