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

在Databricks中用Python实现ADLS中JSON文件的查找、重命名与移动

Databricks中移动ADLS JSON文件的问题解决

问题根源

在Databricks环境中,挂载的ADLS路径由DBFS(Databricks文件系统)管理,os模块是针对本地文件系统设计的工具,无法完全适配分布式存储的操作逻辑,这就是你用os.listdir和os.rename报错找不到文件的核心原因。同时你的原代码存在逻辑漏洞:os.rename写在循环外部,只会处理循环最后遍历到的JSON文件,若源文件夹有多个JSON文件,会导致遗漏或覆盖。

推荐解决方案:使用dbutils.fs工具

dbutils.fs是Databricks官方提供的文件系统操作工具,完美支持DBFS及挂载的ADLS路径,代码如下:

# 定义源文件夹与目标文件夹路径
source_folder = "/mnt/datalake/raw/Group/CompanyName/API/JSON/Campaign_Tags/"
target_folder = "/mnt/datalake/cleansed/Group/CompanyName/API/JSON/Campaign_Tags/"
target_filename = "Campaign_Tags.json"

# 列出源文件夹下所有文件对象
files = dbutils.fs.ls(source_folder)

# 遍历筛选并处理JSON文件
for file in files:
    # 过滤出非临时的JSON文件(排除_committed、_started这类文件)
    if file.name.endswith(".json") and not file.name.startswith("_"):
        # 拼接完整的源路径与目标路径
        source_full_path = file.path
        target_full_path = f"{target_folder.rstrip('/')}/{target_filename}"
        
        # 执行移动并重命名操作
        dbutils.fs.mv(source_full_path, target_full_path)
        print(f"文件移动完成: {source_full_path} → {target_full_path}")
        break  # 若仅需处理一个JSON文件,找到后退出循环即可

备选方案:用Spark API处理复杂场景

如果需要更复杂的文件筛选逻辑,可结合Spark API实现:

from pyspark.sql import SparkSession

spark = SparkSession.builder.getOrCreate()

source_folder = "/mnt/datalake/raw/Group/CompanyName/API/JSON/Campaign_Tags/"
target_folder = "/mnt/datalake/cleansed/Group/CompanyName/API/JSON/Campaign_Tags/"
target_filename = "Campaign_Tags.json"

# 获取源文件夹下所有JSON文件的路径
json_file_paths = spark.read.json(source_folder).inputFiles()

# 遍历处理每个符合条件的文件
for path in json_file_paths:
    filename = path.split("/")[-1]
    if not filename.startswith("_"):
        target_path = f"{target_folder.rstrip('/')}/{target_filename}"
        dbutils.fs.mv(path, target_path)
        print(f"文件移动完成: {path} → {target_path}")
        break

注意事项

  • 确保你的Databricks集群已配置好ADLS的访问权限(存储密钥或服务主体权限正常)。
  • 若源文件夹可能存在多个JSON文件,可根据需求移除break语句,或者添加额外逻辑处理多文件场景。
  • 使用dbutils.fs.mv时,若目标文件已存在会报错,可提前用dbutils.fs.exists(target_full_path)检查,或添加overwrite=True参数(部分Databricks版本支持)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 03:12:55