You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Databricks中将DBFS文件及文件夹上传至ADLS?

从DBFS迁移文件到ADLS并在Databricks中访问的操作指南

一、前期准备

  • 确保已创建Azure Data Lake Storage Gen2存储账户及目标容器
  • 在Databricks中配置ADLS访问权限(推荐使用服务主体):
    1. 创建Azure AD服务主体,为其分配存储账户的Storage Blob Data Contributor角色
    2. 在Databricks集群或笔记本中配置凭据:
      spark.conf.set("fs.azure.account.auth.type.<存储账户名>.dfs.core.windows.net", "OAuth")
      spark.conf.set("fs.azure.account.oauth.provider.type.<存储账户名>.dfs.core.windows.net", "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider")
      spark.conf.set("fs.azure.account.oauth2.client.id.<存储账户名>.dfs.core.windows.net", "<服务主体Client ID>")
      spark.conf.set("fs.azure.account.oauth2.client.secret.<存储账户名>.dfs.core.windows.net", "<服务主体Client Secret>")
      spark.conf.set("fs.azure.account.oauth2.client.endpoint.<存储账户名>.dfs.core.windows.net", "https://login.microsoftonline.com/<租户ID>/oauth2/token")
      

二、迁移DBFS文件到ADLS

提供3种常用迁移方式,按需选择:

方式1:dbutils.fs命令(适合小批量文件)

支持单文件或递归复制整个文件夹:

# 复制单个文件
dbutils.fs.cp("dbfs:/源路径/文件名", "abfss://<容器名>@<存储账户名>.dfs.core.windows.net/目标路径/文件名")

# 递归复制整个文件夹
dbutils.fs.cp("dbfs:/源文件夹路径", "abfss://<容器名>@<存储账户名>.dfs.core.windows.net/目标文件夹路径", recurse=True)

方式2:Spark批量迁移(适合大文件/海量文件)

利用Spark分布式能力高效处理大规模迁移:

# 读取DBFS源目录下的所有文件元数据
source_files = spark.read.format("binaryFile").load("dbfs:/源路径/**")

# 定义文件复制逻辑
def copy_single_file(row):
    source_path = row["path"]
    target_path = source_path.replace("dbfs:/", "abfss://<容器名>@<存储账户名>.dfs.core.windows.net/目标根路径/")
    dbutils.fs.cp(source_path, target_path)

# 批量执行复制
source_files.foreach(copy_single_file)

方式3:Azure CLI(适合脚本化批量操作)

在本地或云Shell中执行:

# 登录Azure账户
az login

# 递归复制DBFS文件到ADLS
az databricks fs cp dbfs:/源路径 abfss://<容器名>@<存储账户名>.dfs.core.windows.net/目标路径 --recursive

三、验证迁移结果

检查文件完整性:

# 统计源目录文件数量
source_file_count = len(dbutils.fs.ls("dbfs:/源路径"))
# 统计目标目录文件数量
target_file_count = len(dbutils.fs.ls("abfss://<容器名>@<存储账户名>.dfs.core.windows.net/目标路径"))

print(f"源文件数: {source_file_count}, 目标文件数: {target_file_count}")

也可随机抽取文件对比大小,确认无损坏或丢失。

四、在Databricks中访问ADLS文件

迁移完成后,有两种常用访问方式:

方式1:直接使用ABFS路径

无需挂载,直接通过ABFS路径读写:

# 读取ADLS中的CSV文件
df = spark.read.csv("abfss://<容器名>@<存储账户名>.dfs.core.windows.net/目标路径/data.csv")

# 将数据写入ADLS为Parquet格式
df.write.parquet("abfss://<容器名>@<存储账户名>.dfs.core.windows.net/目标路径/output.parquet")

方式2:挂载ADLS到DBFS(可选,适配原有路径习惯)

将ADLS容器挂载到DBFS,保持熟悉的路径风格:

# 挂载ADLS容器到DBFS指定路径
dbutils.fs.mount(
    source = "abfss://<容器名>@<存储账户名>.dfs.core.windows.net/",
    mount_point = "/mnt/adls-mount",
    extra_configs = {
        "fs.azure.account.auth.type.<存储账户名>.dfs.core.windows.net": "OAuth",
        "fs.azure.account.oauth.provider.type.<存储账户名>.dfs.core.windows.net": "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider",
        "fs.azure.account.oauth2.client.id.<存储账户名>.dfs.core.windows.net": "<服务主体Client ID>",
        "fs.azure.account.oauth2.client.secret.<存储账户名>.dfs.core.windows.net": "<服务主体Client Secret>",
        "fs.azure.account.oauth2.client.endpoint.<存储账户名>.dfs.core.windows.net": "https://login.microsoftonline.com/<租户ID>/oauth2/token"
    }
)

# 通过挂载路径访问文件
df = spark.read.csv("/mnt/adls-mount/目标路径/data.csv")

内容的提问来源于stack exchange,提问作者user19930511

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 08:30:24