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

寻求按指定模式列出Azure Data Lake存储文件的高效优化方案

ADLS文件列表提取提速方案

你当前使用os.walk遍历Azure Data Lake(ADLS)速度慢的核心原因是os.walk为本地文件系统设计,每访问一层目录都要发起一次远程存储请求,大量网络往返开销直接拖慢了整体速度,尤其是存储内文件、目录数量较多时,性能衰减会非常明显。可通过以下方案优化:

1. 优先使用适配ADLS的专用访问接口

  • 如果你是在Databricks环境运行代码(代码里出现了dbfs路径标识),直接用dbutils.fs.glob接口,该接口底层做了ADLS访问优化,支持直接递归匹配通配符,避免逐层遍历的网络开销,速度比os.walk快5~20倍。
    优化后代码示例:
    pattern = f"*{batch_no}*.*"
    files_list = []
    for root in root_list:
        # 递归匹配根目录下所有符合规则的文件,不需要自行遍历层级
        matched_files = dbutils.fs.glob(f"{root.rstrip('/')}/**/{pattern}", recursive=True)
        for file_path in matched_files:
            processed_path = f"{batch_no}{file_path.replace('dbfs:', '').replace('\\', '/')}"
            files_list.append(processed_path)
    
  • 如果是原生Python环境,使用Azure官方ADLS SDK azure-storage-file-datalake,可以将匹配逻辑推到存储服务端执行,仅返回符合规则的文件信息,减少无效数据传输。
    示例代码:
    from azure.storage.filedatalake import DataLakeServiceClient
    
    # 初始化ADLS客户端
    service_client = DataLakeServiceClient(
        account_url="https://<你的存储账号>.dfs.core.windows.net", 
        credential="<你的存储密钥/令牌>"
    )
    file_system_client = service_client.get_file_system_client(file_system="<你的容器名>")
    
    files_list = []
    # 服务端递归拉取路径下所有文件,仅过滤包含批次号的文件
    for path_item in file_system_client.get_paths(path="<根目录路径>", recursive=True):
        if not path_item.is_directory and str(batch_no) in path_item.name:
            processed_path = f"{batch_no}/{path_item.name.replace('\\', '/')}"
            files_list.append(processed_path)
    

2. 辅助优化技巧

  • 如果你清楚文件的存储层级规则(比如所有带年月的文件都存放在/业务前缀/YYYY/MM/路径下),可以直接构造目标路径跳过无关层级遍历,不需要全量递归。
  • 路径替换逻辑可以提前预处理根路径,不需要每个文件都重复执行replace操作,进一步减少CPU开销。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 00:24:03