如何将dbfs:/FileStore中的文件下载至本地机器?
自动化下载DBFS中Spark结果文件到本地(Databricks社区版)
针对你在Databricks社区版里遇到的批量下载dbfs:/FileStore/my_result下所有part-xxxxx文件的问题,这里有几个实用的方案,完全适配社区版的限制:
方法1:使用Databricks CLI(最适合自动化场景)
这是批量下载最便捷的方式,适合编写脚本自动完成,步骤如下:
- 安装Databricks CLI:通过pip直接安装
pip install databricks-cli - 配置社区版工作区:
- 打开你的社区版工作区,点击右上角用户头像 → User Settings → Access Tokens → Generate New Token,复制生成的token(务必保存好,关闭页面后无法再次查看)。
- 运行配置命令,输入你的社区版工作区URL(比如
https://community.cloud.databricks.com/)和刚才的token:databricks configure --token
- 批量下载文件夹:
执行以下命令,将DBFS中的整个文件夹递归下载到本地指定路径:
这个命令会自动处理所有子文件和文件夹,包括所有databricks fs cp -r dbfs:/FileStore/my_result ./local_download_folderpart-xxxxx文件。
方法2:在Databricks笔记本中打包为ZIP后下载
如果不想用CLI,可以在作业完成后的笔记本里直接打包文件,下载单个ZIP包更省心:
方式A:Python代码打包(适合小文件)
在笔记本中运行以下代码,将目标文件夹打包为ZIP并触发下载:
import zipfile # 定义路径 dbfs_source = "/FileStore/my_result" local_zip = "/tmp/my_result.zip" # 打包DBFS文件到ZIP with zipfile.ZipFile(local_zip, 'w', zipfile.ZIP_DEFLATED) as zipf: for file in dbutils.fs.ls(dbfs_source): if not file.isDir(): # 读取文件内容并写入ZIP content = dbutils.fs.head(file.path) zipf.writestr(file.name, content) # 下载ZIP到本地 dbutils.fs.download(local_zip, "my_result.zip")
运行后笔记本会直接触发ZIP文件的下载,你只需保存到本地即可。
方式B:Shell命令打包(适合大文件)
切换到笔记本的Shell单元格(开头加%sh),运行以下命令打包:
%sh # 直接打包DBFS文件夹到本地临时ZIP zip -r /tmp/my_result.zip /dbfs/FileStore/my_result
打包完成后,在笔记本左侧Files → tmp目录找到my_result.zip,右键点击选择Download即可。
方法3:浏览器控制台脚本(临时批量下载)
如果只是临时需要批量下载,不想安装工具或写代码,可以用浏览器控制台自动点击所有下载链接:
- 打开Databricks社区版的DBFS浏览器,进入
/FileStore/my_result文件夹。 - 按下
F12打开开发者工具,切换到Console标签。 - 粘贴以下脚本并回车:
// 获取所有part文件的下载链接 const partLinks = document.querySelectorAll('a[href*="/files/FileStore/my_result/part-"]'); // 遍历触发下载 partLinks.forEach(link => { const downloadBtn = document.createElement('a'); downloadBtn.href = link.href; downloadBtn.download = link.textContent; document.body.appendChild(downloadBtn); downloadBtn.click(); document.body.removeChild(downloadBtn); });
注意:部分浏览器会阻止批量下载,需要在弹窗中允许该网站的下载权限。
内容的提问来源于stack exchange,提问作者Nacho Castiñeiras
相关产品推荐
相关产品推荐

