如何在Databricks中使用Python执行基础数据查询?
在Databricks中运行现有Python数据处理代码的解决方案
核心问题分析
你遇到的两个错误本质是没利用Databricks的原生数据访问能力:
read_sql缺少con参数:Pandas的read_sql必须传入数据库连接对象,第一次调用时未传入pyodbc模块缺失:Databricks集群默认不预装pyodbc,且用ODBC连接自身表完全没必要
最优解决方案:用Databricks原生Spark读取并转Pandas DataFrame
Databricks内置了SparkSession对象(spark),可以直接访问集群中的表,再转成Pandas DataFrame,原有Python代码无需大幅修改:
import pandas as pd # 用Spark SQL读取Databricks中的目标表(无需额外连接配置) spark_df = spark.sql("SELECT * FROM databasename.tablename") # 转换为Pandas DataFrame,后续原有Pandas处理代码直接使用这个df即可 df = spark_df.toPandas()
优势
- 无需安装任何额外模块,直接使用Databricks内置能力
- 大数据量场景下,Spark先做分布式读取/过滤,再转Pandas,性能远优于单节点的
pyodbc+Pandas方案 - 原有Pandas处理代码可以直接复用,无需修改逻辑
若必须使用Pandas read_sql的兼容方案
如果你的代码强依赖pandas.read_sql,可以按以下步骤操作:
安装pyodbc模块
在Databricks Notebook中执行以下命令安装(推荐通过集群库管理永久安装,避免重启后丢失):%pip install pyodbc配置Databricks ODBC连接
需要获取Databricks工作区的连接信息(工作区URL、HTTP路径、个人访问令牌),然后构造正确的连接字符串:import pyodbc # 替换为你的Databricks连接信息 conn_str = ( "Driver={Databricks ODBC Driver};" "Hostname=your-workspace-url.databricks.com;" "Port=443;" "HTTPPath=/sql/1.0/warehouses/your-warehouse-id;" "AuthMech=3;" "UID=token;" "PWD=your-personal-access-token;" ) # 建立连接并读取数据 conn = pyodbc.connect(conn_str) df = pd.read_sql("SELECT * FROM databasename.tablename", con=conn)
注意事项
- 需要在集群上安装Databricks ODBC驱动(部分云环境的Databricks集群可能已预装)
- 该方案仅适合小数据量场景,大数据量下性能远不如原生Spark方案
内容的提问来源于stack exchange,提问作者Ziggy
相关产品推荐
相关产品推荐

