從Databricks Runtime 5.5升級後讀取外部JDBC表時遇到問題

從Databricks Runtime 5.5升級到6.0及以上版本後,讀取外部JDBC表失敗。

寫的穆罕默德。Haseeb

最後發布日期:2022年5月23日

問題

嚐試通過JDBC讀取外部表在Databricks Runtime 5.5上可以正常工作,但是在Databricks Runtime 6.0及以上版本上讀取相同的表會失敗。

你會看到類似如下的錯誤:

com.databricks.backend.common.rpc.DatabricksExceptions$SQLExecutionException: java.util.concurrent.ExecutionException: org.apache.spark.sql.AnalysisException: org.apache.spark.sql.jdbc不允許用戶指定的模式。at com.google.common.util.concurrent.AbstractFuture$Sync.getValue(AbstractFuture.java:299) at com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java: 286) at com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:116) at java.lang.Thread.run(Thread.java:748)原因:org.apache.spark.sql.AnalysisException: org.apache.spark.sql.jdbc不允許用戶指定的模式;org.apache.spark.sql.execution.datasources.DataSource.resolveRelation (DataSource.scala: 350)

導致

Databricks運行時5.5及以下版本推斷session_id屬性作為短整型.Databricks Runtime 6.0及以上版本session_id屬性作為int

這是對session_id屬性導致查詢因模式問題而失敗。

解決方案

如果您正在使用在Databricks Runtime 5.5及以下版本(Databricks Runtime 6.0及以上版本)中創建的外部表,必須設置Apache Spark配置spark.sql.legacy.mssqlserver.numericMapping.enabled真正的.這確保Databricks Runtime 6.0及以上版本可以推斷session_id屬性作為短整型

  1. 打開集群頁麵。
  2. 選擇集群。
  3. 點擊編輯
  4. 點擊高級選項
  5. 點擊火花
  6. 火花配置字段中,輸入spark.sql.legacy.mssqlserver.numericMapping.enabled真實
  7. 保存更改並啟動或重新啟動集群。