pyspark spark.read.format(“jdbc”)在DatabricksRuntime10.4中工作,但在带有spark.read.format(“sqlserver”)的Runtime12.2中不工作

xu3bshqb  于 2023-08-02  发布在  Spark
关注(0)|答案(1)|浏览(118)

这就是我如何成功地从Databricks Runtime 10.4中的SQL服务器阅读数据,使用遗留的JDBC驱动程序:

remote_table = (
  spark.read.format("jdbc")
    .option("driver", "com.microsoft.sqlserver.jdbc.SQLServerDriver")
    .option("url", "jdbc:sqlserver://mydomainname.com;database=Runtime")
    .option("dbtable", "Runtime.dbo.History")
    .option("user", "myusername")
    .option("password", "mypassword")
    .load()
)

字符串
我想在Runtime 12.2中使用“较新”的方法:

remote_table = (spark.read
  .format("sqlserver")
  .option("host", "mydomainname.com")
  .option("user", "myusername")
  .option("password", "mypassword")
  .option("database", "Runtime")
  .option("dbtable", "Runtime.dbo.History")
  .load()
)


但返回一个错误:
com.microsoft.sqlserver.jdbc.SQLServerException:驱动程序无法使用 ssl 层(SSL)加密建立到SQL Server的安全连接。错误:“PKIX路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到到请求的目标”“的有效证书路径。ClientConnectionId:56f3b77d-a90a-4c89-98be-88924f364897
是的,我记得将集群切换到运行时12.2的集群。

gjmwrych

gjmwrych1#

“sqlserver”连接器只是JDBC的 Package 器,如果您尝试传统的JDBC连接,您将在runtime 12.x上遇到相同的问题。
虽然Databricks runtime 10.x使用SQL Server JDBC驱动程序版本9.x,但版本10.2(在12.x runtime中使用)中有一个突破性的更改,默认情况下启用TLS加密并强制证书验证。对于这个类似的问题,回答了here。SQL Server文档中的额外信息了解加密支持。
简而言之,添加以下选项:

.option("encrypt", "false")

字符串
或者是

.option("encrypt", "true")
.option("trustServerCertificate", "true")

相关问题