databricks-connect 14.3.*命令行运行脚本报错,10.4.*正常求解决
问题场景
在虚拟环境中使用databricks-connect==14.3.*执行脚本:
python .\my_python_file.py --environment prod --extraction_date 2024-04-24
触发错误:
RuntimeError: Only remote Spark sessions using Databricks Connect are supported. Could not find connection parameters to start a Spark remote session.
该脚本在databricks-connect==10.4.*版本可正常运行,新版本已移除databricks-connect configure命令,改用Databricks VS Code扩展完成配置,且同一终端内databricks-connect test执行成功,但脚本仍报错。
解决方案
你的推测正确,新版本Databricks Connect依赖Databricks CLI的认证profile加载连接参数,需通过以下方式指定profile:
方法1:执行脚本时通过环境变量指定profile
在命令中添加DATABRICKS_PROFILE环境变量,替换<你的profile名称>为databricks auth login创建的profile名:
# Windows set DATABRICKS_PROFILE=<你的profile名称> && python .\my_python_file.py --environment prod --extraction_date 2024-04-24 # Linux/macOS DATABRICKS_PROFILE=<你的profile名称> python .\my_python_file.py --environment prod --extraction_date 2024-04-24
方法2:在脚本内显式指定profile
在Python脚本开头添加代码,设置环境变量指定profile:
import os os.environ["DATABRICKS_PROFILE"] = "<你的profile名称>" # 初始化SparkSession的代码放在后面 from pyspark.sql import SparkSession spark = SparkSession.builder.getOrCreate()
方法3:终端全局设置环境变量
先在终端设置环境变量,再执行脚本:
# Windows set DATABRICKS_PROFILE=<你的profile名称> # Linux/macOS export DATABRICKS_PROFILE=<你的profile名称> # 执行脚本 python .\my_python_file.py --environment prod --extraction_date 2024-04-24
原因说明
Databricks Connect 13.0+重构了认证逻辑,不再依赖旧版databricks-connect configure生成的本地配置文件,而是复用Databricks CLI的认证profile。databricks-connect test能成功是因为它会自动检测可用profile,但Python脚本默认不会自动加载,必须显式指定profile才能获取连接参数。
内容的提问来源于stack exchange,提问作者BelowZero

