問題
嚐試通過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.uti.concurrent.abstractfuture $Sync.getValue(AbstractFuture.java:299) at com.google.common.uti.concurrent.abstractfuture $Sync.get(AbstractFuture.java:286) at com.google.common.uti.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 Runtime 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屬性作為一個短整型。
- 打開集群頁麵。
- 選擇一個集群。
- 點擊編輯。
- 點擊高級選項。
- 點擊火花。
- 在火花配置字段中,輸入spark.sql.legacy.mssqlserver.numericMapping.enabled真實。
- 保存更改並啟動或重新啟動集群。