能否从Azure Data Factory访问Databricks DBFS?DBFS内数据复制咨询
解决DBFS文件复制的正确姿势
这问题我之前帮同事处理过,核心原因是你选的Azure Delta Storage数据集是专门为Delta Lake表设计的,它会强制校验源/目标是否是标准Delta表,自然没法处理DBFS上的普通持久化文件。要实现DBFS到DBFS的文件复制,有两个直接可行的方案:
方案1:直接访问DBFS底层存储(推荐)
DBFS的持久化存储本质上都是挂载在Azure Blob Storage或ADLS Gen2上的(除了集群本地临时存储)。你可以跳过Databricks,直接在Data Factory里配置对应的存储连接器:
- 先在Databricks里确认DBFS路径对应的底层存储:运行
dbutils.fs.mounts()查看挂载信息,或者用dbutils.fs.ls("dbfs:/your/target/path")查看路径属性 - 在Data Factory里创建Azure Blob Storage或ADLS Gen2类型的数据集,用存储账户密钥、SAS令牌或服务Principal完成授权
- 直接填写DBFS对应的底层存储路径(比如
abfss://container@storageaccount.dfs.core.windows.net/data/对应dbfs:/mnt/adls/data/) - 最后用Copy Data Activity连接这两个数据集,就能像复制普通存储文件一样完成DBFS文件的迁移,完全不需要依赖Databricks集群表
方案2:用Databricks Notebook活动完成复制
如果没法直接访问底层存储,你可以在Data Factory里调用Databricks Notebook活动,用PySpark代码直接操作DBFS路径:
# 示例:递归复制DBFS目录下的所有文件 dbutils.fs.cp("dbfs:/source/folder/", "dbfs:/target/folder/", recurse=True) # 单个文件复制 dbutils.fs.cp("dbfs:/source/file.parquet", "dbfs:/target/file.parquet")
- 这个方法完全基于DBFS原生路径操作,不需要关心底层存储细节
- 还能在Notebook里添加自定义逻辑(比如过滤特定后缀的文件、重命名等)
- 在Data Factory管道里添加这个Notebook活动,就能替代Copy Data Activity完成复制任务
避坑提示
绝对不要用Azure Delta Storage数据集处理非Delta表的文件,它的内置校验逻辑一定会报你遇到的“不是Delta表”错误。优先用方案1,性能和可靠性都更好;方案2适合有自定义需求的场景。
内容的提问来源于stack exchange,提问作者user3216754
相关产品推荐
相关产品推荐

