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

Databricks中如何使用通配符列举ADLS目录下的Parquet文件

问题原因

dbutils.fs.ls 原生不支持通配符匹配,传入带*的路径时,接口会直接把*.parquet当成实际存在的目录名解析,不会做后缀模糊匹配,因此原写法无法生效。

可行方案

方案1:列目录后本地过滤(性能最优,适用于单级目录场景)

直接列目标目录下的所有子项,通过字符串后缀筛选parquet文件即可,无额外依赖:

# 路径末尾建议加/,明确指向目标目录
all_items = dbutils.fs.ls("abfss://path/to/raw/files/")
# 筛选后缀为.parquet的文件项
parquet_files = [f for f in all_items if f.path.endswith(".parquet")]

方案2:递归遍历(适用于查找多级子目录下parquet的场景)

如果目标目录下存在多层子文件夹,需要递归遍历所有层级筛选parquet,可以通过自定义函数实现:

def list_all_parquet(base_path):
    parquet_list = []
    for item in dbutils.fs.ls(base_path):
        if item.path.endswith(".parquet"):
            parquet_list.append(item)
        # 遇到子目录则递归遍历
        elif item.isDir():
            parquet_list.extend(list_all_parquet(item.path))
    return parquet_list

# 调用方法获取所有层级的parquet文件
all_parquet_files = list_all_parquet("abfss://path/to/raw/files/")

方案3:借助Spark原生通配符能力(写法最简洁)

Spark本身的文件读取接口原生支持通配符匹配,可以直接获取所有匹配路径的parquet文件:

# 匹配当前目录下所有parquet
parquet_file_paths = spark.read.parquet("abfss://path/to/raw/files/*.parquet").inputFiles()

# 如果要匹配所有子目录下的parquet,把通配符改成**/*.parquet即可
# parquet_file_paths = spark.read.parquet("abfss://path/to/raw/files/**/*.parquet").inputFiles()

注意:该方法会加载parquet文件的元数据,如果目录下文件量级极大,性能会比前两种直接遍历文件系统的方案稍差。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 11:39:27