問題
試圖讀取外部表通過JDBC 5.5磚上運行時沒問題,但相同的表上麵的磚6.0運行時,讀取失敗。
你看到一個錯誤類似如下:
com.databricks.backend.common.rpc.DatabricksExceptions SQLExecutionException美元:java . util . concurrent。ExecutionException: org.apache.spark.sql。AnalysisException: org.apache.spark.sql。jdbc不允許用戶指定的模式。com.google.common.util.concurrent.AbstractFuture Sync.getValue美元(AbstractFuture.java: 299)美元com.google.common.util.concurrent.AbstractFuture Sync.get (AbstractFuture.java: 286) com.google.common.util.concurrent.AbstractFuture.get (AbstractFuture.java: 116) 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)
導致
磚5.5運行時,以下推斷session_id屬性作為一個短整型。磚運行時6.0及以上的推斷session_id屬性作為一個int。
這種變化的session_id屬性查詢失敗原因與模式問題。
解決方案
如果使用外部表創建在磚磚下麵5.5運行時,運行時6.0及以上,必須設置Apache火花配置spark.sql.legacy.mssqlserver.numericMapping.enabled來真正的。這將確保磚運行時6.0及以上的推斷session_id屬性作為一個短整型。
- 打開集群頁麵。
- 選擇一個集群。
- 點擊編輯。
- 點擊高級選項。
- 點擊火花。
- 在火花配置字段中,輸入spark.sql.legacy.mssqlserver.numericMapping.enabled真正的。
- 保存更改並開始或重新啟動集群。