如何在Databricks中将PySpark DataFrame保存为可下载Excel文件
在Databricks中从PySpark DataFrame生成可下载Excel文件的方法
你可以通过以下几种方式实现本地下载生成的Excel文件:
方法一:利用FileStore目录生成Web下载链接
Databricks的/FileStore目录支持通过Web UI访问,你可以将生成的Excel文件复制到该目录,然后通过浏览器链接下载:
import pandas as pd import xlsxwriter # 将PySpark DataFrame转换为Pandas DataFrame pandas_df = REV_COMP_DF.toPandas() # 保存到Driver节点的临时目录 local_temp_path = '/tmp/revenue.xlsx' pandas_df.to_excel(local_temp_path, engine='xlsxwriter', header=True) # 复制到DBFS的FileStore目录 dbfs_store_path = '/FileStore/revenue.xlsx' dbutils.fs.cp(f'file:{local_temp_path}', dbfs_store_path, overwrite=True) # 生成可直接访问的下载链接 workspace_host = dbutils.notebook.entry_point.getDbutils().notebook().getContext().browserHostName().get() print(f"Excel文件下载链接:https://{workspace_host}/files/revenue.xlsx")
执行后,复制打印的链接到浏览器即可下载(需保持Databricks工作区登录状态)。
方法二:通过Databricks UI手动下载
将文件复制到/FileStore目录后,可通过UI操作下载:
- 打开Databricks左侧导航栏的「数据」选项
- 找到
FileStore目录,定位到目标Excel文件 - 右键点击文件,选择「下载」
方法三:直接在Notebook中生成下载按钮(无需存DBFS)
如果数据量较小,可将Excel文件写入内存流,通过HTML按钮直接触发下载:
import pandas as pd import xlsxwriter from io import BytesIO import base64 # 转换为Pandas DataFrame pandas_df = REV_COMP_DF.toPandas() # 将Excel写入内存字节流 output_stream = BytesIO() with pd.ExcelWriter(output_stream, engine='xlsxwriter') as writer: pandas_df.to_excel(writer, header=True) output_stream.seek(0) # 生成Base64编码并创建下载按钮 excel_base64 = base64.b64encode(output_stream.read()).decode() download_button = f""" <a href="data:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;base64,{excel_base64}" download="revenue.xlsx">点击下载Excel文件</a> """ displayHTML(download_button)
执行代码后,Notebook会显示一个可点击的按钮,点击即可直接下载到本地。
注意事项
- 若PySpark DataFrame数据量过大,不建议转换为Pandas DataFrame(会将全量数据加载到Driver节点,可能引发内存溢出),这种情况建议使用Spark专用的Excel处理库进行分布式写入,再通过上述方法下载合并后的文件。
FileStore目录下的文件仅对已登录Databricks工作区的用户可见,无需担心公开访问问题。
内容的提问来源于stack exchange,提问作者Beci jacob
相关产品推荐
相关产品推荐

