问题
试图读取外部表通过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真正的。
- 保存更改并开始或重新启动集群。