Databricks如何将SQL查询结果存储到本地磁盘CSV/Excel文件?
问题根因
to_csv是Pandas DataFrame的内置方法,你当前操作的是Spark DataFrame,原生不存在该方法,直接调用必然报错。- Databricks Notebook的代码运行在远端集群服务器上,而非你本地的Windows电脑,你写的
file:///C:/路径指向的是集群节点的本地磁盘,Linux系统根本没有Windows的C盘盘符,就算是Windows集群节点,文件写入后也存在远端服务器上,你本地电脑无法直接访问。
可行操作方案
方案1:小数据集(<10万行)快速导出
直接转Pandas DataFrame后生成下载链接,步骤最简单:
%python # Spark DataFrame转Pandas DataFrame pdf = df.toPandas() # 导出CSV到集群临时存储,utf-8-sig编码避免Windows打开中文乱码 pdf.to_csv("/dbfs/tmp/customer.csv", index=False, encoding="utf-8-sig") # 若需要导出Excel,先安装依赖再执行导出 # %pip install openpyxl # pdf.to_excel("/dbfs/tmp/customer.xlsx", index=False)
执行完上述代码后,运行以下命令生成可点击的下载链接,点击即可将文件保存到你本地电脑磁盘:
%python # CSV下载链接 displayHTML("<a href='/files/tmp/customer.csv' target='_blank'>下载CSV文件</a>") # Excel下载链接 # displayHTML("<a href='/files/tmp/customer.xlsx' target='_blank'>下载Excel文件</a>")
方案2:大数据集(>10万行)导出
数据量较大时转Pandas容易出现内存溢出,用Spark原生API写入后再下载:
%python import os # 合并为单文件写入DBFS临时路径 df.coalesce(1).write.option("header","true").option("sep",",").mode("overwrite").csv("/tmp/customer_spark_output") # 定位Spark生成的csv分片文件,重命名为固定文件名 csv_file = [f for f in os.listdir("/dbfs/tmp/customer_spark_output") if f.endswith(".csv")][0] os.rename(f"/dbfs/tmp/customer_spark_output/{csv_file}", "/dbfs/tmp/customer_final.csv") # 生成下载链接 displayHTML("<a href='/files/tmp/customer_final.csv' target='_blank'>下载CSV文件</a>")
方案3:临时取数无代码导出
直接在Notebook中运行display(df)渲染结果表,点击表格右上角的下载按钮,可直接选择导出为CSV/Excel格式,无需编写额外导出代码,适合小批量临时取数场景。
注意事项
- 永远不要在Databricks代码中直接写本地电脑的磁盘路径(如
C:/开头的路径),代码运行环境和你的本地电脑不共享文件系统,这类路径不可能正常生效。 - 数据量超过100万行时不建议使用方案1,优先选择方案2避免集群Driver节点内存溢出。
- 导出CSV时使用
utf-8-sig编码,可避免Windows系统下用Excel打开文件出现中文乱码。
内容的提问来源于stack exchange,提问作者SeleniumUser
相关产品推荐
相关产品推荐

