Docker部署Superset连接Azure Databricks失败求助
连接Superset与Azure Databricks时的TypeError问题解决方法
问题背景
通过Docker部署Superset并完成登录,操作流程如下:
- 在
/superset/docker/目录下创建requirements-local.txt文件,添加依赖databricks-dbapi[hive,odbc,sqlalchemy] - 执行
docker-compose build --force-rm命令重新构建镜像 - 执行
docker-compose -f docker-compose-non-dev.yml启动服务,Superset正常运行且可登录
尝试连接Azure Databricks时的操作:
- 进入「Data」->「Connect a database」,在支持数据库列表中选择「Databricks SQL Endpoint」
- 在SQLALCHEMY URI输入框填入:
databricks+pyhive://token:{access_token}@{server_hostname}:{port}/{database_name} - 在ADVANCED->Other->ENGINE PARAMETERS区域填入:
{"connect_args": {"http_path": "sql/protocolv1/o/****"}} - 点击「TEST CONNECTION」触发如下错误
错误日志
superset_app | SupersetErrorsException superset_app | Traceback (most recent call last): superset_app | File "/app/superset/databases/commands/test_connection.py", line 102, in run superset_app | with database.get_sqla_engine_with_context() as engine: superset_app | File "/usr/local/lib/python3.8/contextlib.py", line 113, in enter superset_app | return next(self.gen) superset_app | File "/app/superset/models/core.py", line 372, in get_sqla_engine_with_context superset_app | yield self._get_sqla_engine(schema=schema, nullpool=nullpool, source=source) superset_app | File "/app/superset/models/core.py", line 396, in _get_sqla_engine superset_app | params["poolclass"] = NullPool superset_app | TypeError: 'str' object does not support item assignment
问题原因与解决步骤
原因分析
该错误是因为ENGINE PARAMETERS被解析为字符串而非JSON对象,导致Superset尝试对字符串进行字典操作时失败;另外使用pyhive dialect可能存在兼容性问题。
解决方法
方法一:修正ENGINE PARAMETERS输入格式
确保输入的是标准JSON,不要在外层添加额外引号。正确输入应为:
{"connect_args": {"http_path": "sql/protocolv1/o/****"}}
输入后确认Superset将其识别为JSON对象而非字符串。
方法二:将http_path整合到SQLALCHEMY URI中
直接把http_path作为URI参数传入,避免使用ENGINE PARAMETERS,格式如下:
databricks+pyhive://token:{access_token}@{server_hostname}:{port}/{database_name}?http_path=sql/protocolv1/o/****
方法三:使用官方推荐的Databricks SQL Connector
- 修改
requirements-local.txt中的依赖,替换为:databricks-sql-connector - 重新构建镜像并启动服务:
docker-compose build --force-rm docker-compose -f docker-compose-non-dev.yml up -d - 使用新的SQLALCHEMY URI格式:
此方法兼容性更好,是Databricks官方推荐的连接方式。databricks+connector://token:{access_token}@{server_hostname}:{port}/{database_name}?http_path=sql/protocolv1/o/****
方法四:验证依赖安装
进入Superset容器检查依赖是否正确安装:
docker exec -it <你的Superset容器名称> pip list | grep databricks
如果未找到对应包,需重新构建镜像确保依赖安装成功。
验证连接
完成上述调整后,重新点击「TEST CONNECTION」,连接成功后即可导入Azure Databricks的数据集,在Superset中创建图表。
内容的提问来源于stack exchange,提问作者Nagaraj
相关产品推荐
相关产品推荐

