将 SQL Server JDBC 的 Windows 身份验证与 pyspark 配合使用

Using windows authentication for SQL Server JDBC with pyspark

提问人:Renos Bardhis 提问时间:8/22/2019 更新时间:8/27/2019 访问量:8475

问:

我想问一下如何使用 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()
sql-server python-3.x apache-spark pyspark windows 身份验证

评论

0赞 Renos Bardhis 8/22/2019
结果是:py4j.protocol.Py4JJavaError:调用 o39.load 时出错。

答:

3赞 abiratsis 8/22/2019 #1

如此处所示,您可以设置通过 jdbc 和 Windows 身份验证连接到 SQL Server。integratedSecurity=true

然后 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()

更新:

正如注释中所讨论的,用户应该放在同一个文件夹中,或者只是为两个 jar 设置,用 : 分隔: 如下图所示:sqljdbc_auth.dllmssql-jdbc-7.4.1.jre12.jarspark.driver.extraClassPath

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

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

评论

0赞 Renos Bardhis 8/23/2019
现在我还有另一个问题。问题现在位于 SparkSession 上。在 .config(“spark.driver.extraClassPath”, “mssql-jdbc-7.4.1.jre12.jar”) 上。引发问题:FileNotFoundError:[WinError 2] 系统找不到指定的文件 我该如何解决这个问题?
0赞 abiratsis 8/23/2019
mssql-jdbc-6.4.0.jre8.jar 位于何处?您应该显式指定此 .jar 的绝对路径
0赞 abiratsis 8/23/2019
另一种方法是将mssql-jdbc-6.4.0.jre8.jar文件移动到jars文件夹下,这是所有jar的默认位置,在本例中,路径为:C:\spark-2.4.3-bin-hadoop2.7\jars
0赞 Renos Bardhis 8/23/2019
正如您所说,我将 jar 文件移动到我的 spark 文件夹中,并且还给出了绝对路径,但仍然遇到了同样的问题。我可以使用另一种配置吗?
0赞 abiratsis 8/23/2019
好的,那么你在哪里运行你的Spark作业?还有这条线目前的样子?.config("spark.driver.extraClassPath","mssql-jdbc-6.4.0.jre8.jar")