本地Spark连接Databricks Catalog读取nation表遇配置架构不可用错误
修复Spark通过JDBC读取Databricks Catalog表时的"Configuration schema is not available"错误
错误原因分析
报错Configuration schema is not available的核心原因是JDBC URL格式错误:你在URL里添加了/samples路径,Databricks JDBC驱动会将这个路径误认为是某个配置schema,而非数据库名,导致服务器无法解析请求。此外,配置中存在一些非标准Spark JDBC参数,也可能干扰驱动的正常工作。
具体修复步骤
修正JDBC URL格式
Databricks JDBC URL的标准格式不包含路径部分的数据库名,正确格式为:jdbc:databricks://<your-hostname>:443;transportMode=http;ssl=1;AuthMech=3;httpPath=<your-http-path>移除URL中的
/samples,将数据库/表的指定放在dbtable或query参数中。清理冗余配置参数
- 移除
hostname、port、schema参数:这些要么已经包含在URL中,要么不是Spark JDBC的标准参数,会被驱动误处理。 - 确保
httpPath是你的Databricks集群的正确HTTP路径(可从集群详情页的"JDBC/ODBC"标签获取)。
- 移除
调整表引用方式
如果直接读取整张表,使用dbtable参数指定完整的三层表名(samples.tpch.nation),比使用query更简洁,也能避免Spark自动生成子查询时的潜在问题。
修改后的完整代码
from pyspark.sql import SparkSession import os os.environ['SPARK_HOME'] = '/opt/spark' os.environ['PATH'] = os.environ['SPARK_HOME'] + '/bin:' + os.environ['PATH'] # 修正后的配置 spark_dict = { "user": "my_user", "password": "my_pass", "driver": "com.databricks.client.jdbc.Driver", # 正确的JDBC URL:移除了/samples路径,替换为真实的hostname和httpPath "url": "jdbc:databricks://my_hostname:443;transportMode=http;ssl=1;AuthMech=3;httpPath=<your-actual-http-path>", # 使用dbtable指定完整表名,替代原query参数(如果需要自定义查询可保留query,但要确保表引用正确) "dbtable": "samples.tpch.nation" } spark = ( SparkSession.builder.appName("abc") .config("spark.jars", "/home/jars/databricks-jdbc-2.6.34.jar") .getOrCreate() ) # 读取数据 df = spark.read.format("jdbc").options(**spark_dict).load() df.show()
额外注意事项
- 确认你的账号拥有
samples.tpch.nation表的SELECT权限,如果权限不足也可能导致类似错误。 - 确保JDBC驱动版本与你的Databricks Runtime版本兼容(2.6.34版本适配大部分新Runtime,但如果仍有问题可尝试升级驱动)。
- 如果需要自定义查询(如排序、分页),可保留
query参数,但要注意SQL语法中排序字段的引号:使用反引号`n_nationkey`而非双引号,避免被解析为字符串常量。
内容的提问来源于stack exchange,提问作者Hassan Shahbaz
相关产品推荐
相关产品推荐

