Sql server 在pyspark中使用SQL Server JDBC的windows身份验证

Sql server 在pyspark中使用SQL Server JDBC的windows身份验证,sql-server,python-3.x,apache-spark,pyspark,windows-authentication,Sql Server,Python 3.x,Apache Spark,Pyspark,Windows Authentication,我想问一下如何使用Windows身份验证和pyspark库连接SQL Server?我可以连接到MicrosoftSQLServerManagementStudio,但当我尝试用spark编写Python代码时就不行了 from pyspark.sql import SparkSession spark = SparkSession \ .builder \ .appName("Python Spark SQL basic example") \ .config("sp

我想问一下如何使用Windows身份验证和pyspark库连接SQL Server?我可以连接到MicrosoftSQLServerManagementStudio,但当我尝试用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()
如图所示,您可以将
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
存在的同一文件夹中,或仅为两个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 Server的Microsoft JDBC驱动程序6.0的一部分,您可以从下载它。或者,您可以在系统上安装JDBC驱动程序并指定dll的存储路径。

结果是:py4j.protocol.Py4JJavaError:调用o39.load时出错。现在我遇到另一个问题。现在问题出在SparkSession上。在.config上(“spark.driver.extraClassPath”,“mssql-jdbc-7.4.1.jre12.jar”)。引发一个问题:FileNotFoundError:[WinError 2]系统找不到指定的文件如何解决此问题?mssql-jdbc-6.4.0.jre8.jar位于何处?您应该明确指定这个.jar的绝对路径。另一种选择是将mssql-jdbc-6.4.0.jre8.jar文件移动到jars文件夹下,这是所有jar的默认位置。在我的例子中,路径是:
C:\spark-2.4.3-bin-hadoop2.7\jars
,正如您所说,我将jar文件移动到了spark文件夹中,并且给出了绝对路径路径,但仍然是相同的问题,我有。我可以使用另一种配置?好的,那么您在哪里运行spark作业?另外,行
.config(“spark.driver.extraClassPath”,“mssql-jdbc-6.4.0.jre8.jar”)
目前看起来怎么样?