使用PySpark通过JDBC访问Azure Databricks时行显示为列名的问题求助
问题描述
通过PySpark使用JDBC访问Azure Databricks时,查询返回的所有行均显示为列名。示例代码及输出如下:
df = spark.read.format("jdbc") .option("url", "jdbc:databricks://<WorkspaceInstance>... <Token>") .option("query", "query") .option("user", "username") .option("password", token) .option("fetchsize", "10") .option("driver", "com.databricks.client.jdbc.Driver") .load() df.show()
输出:
+------------+ |CustomerName| +------------+ |CustomerName| |CustomerName| |CustomerName| +------------+
解决方案
修正JDBC URL格式:Azure Databricks的JDBC URL需包含完整正确的参数,标准格式为:
jdbc:databricks://<workspace-instance>:443;HttpPath=<http-path>;AuthMech=3;UID=token;PWD=<your-personal-access-token>必须指定
HttpPath(可从Databricks工作区的JDBC/ODBC配置页面获取),AuthMech=3表示采用令牌认证,无需单独设置user参数。检查查询语句:确认
query参数中的SQL语句无语法错误。如果误将列名用单引号包裹(如SELECT 'CustomerName' FROM your_table),会返回字符串常量而非列数据,需改为SELECT CustomerName FROM your_table这类正确的查询语句。匹配驱动版本:确保使用的JDBC驱动版本与Databricks Runtime版本兼容,版本不匹配可能导致数据解析异常。
调整认证参数:使用令牌认证时,无需设置
user参数,直接在URL中通过UID=token和PWD=<token>完成认证;或者将user设为token,password设为你的个人访问令牌。
内容的提问来源于stack exchange,提问作者Usman_Ahmed
相关产品推荐
相关产品推荐

