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

如何在Databricks中列出Azure Blob Storage指定目录下的所有文件名

在Databricks中递归列出Azure Blob Storage子文件的方法

针对你遇到的问题,无法通过dbutils.fs.ls直接递归获取子目录下的文件,可以用以下两种实现方式:

方法一:递归遍历函数

通过自定义递归函数,遍历目标目录下的所有子目录,筛选出文件并收集文件名:

def list_all_files(target_path):
    file_names = []
    # 遍历当前路径下的所有项
    for item in dbutils.fs.ls(target_path):
        if item.isFile():
            # 如果是文件,添加文件名到列表
            file_names.append(item.name)
        else:
            # 如果是目录,递归遍历子目录
            file_names.extend(list_all_files(item.path))
    return file_names

# 传入你的Blob Storage路径
result = list_all_files('wasbs://xxx@xxx.blob.core.windows.net/aaa')
print(result)

执行后会返回所有子文件的文件名列表:['bbb1.xml', 'bbb2.xml', 'ccc1.xml', 'ccc2.xml', 'ccc3.xml']

方法二:利用Spark递归通配符

Spark支持使用**作为递归通配符,匹配所有层级的子目录,结合input_file_name()函数提取文件名:

# 读取所有子目录下的xml文件(可根据需要调整文件后缀)
df = spark.read.text('wasbs://xxx@xxx.blob.core.windows.net/aaa/**/*.xml')

# 提取所有唯一的文件路径,再拆分出文件名
file_paths = df.select(input_file_name()).distinct().rdd.flatMap(lambda x: x).collect()
file_names = [path.split('/')[-1] for path in file_paths]

print(file_names)

说明

  • 你之前使用的aaa/*仅能匹配当前目录下的直接子项,无法递归到更深层级,且dbutils.fs.ls不支持这种通配符参数,因此会报错。
  • 两种方法中,递归函数更轻量化,适合小体量文件目录;Spark方法则更适合大规模文件场景,利用分布式处理能力提升效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 13:45:53