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

如何将ADLS与Databricks递归代码改写为迭代代码(计算目录大小)

迭代版实现思路
  • 用栈结构替代递归调用栈:初始化时将根目录路径存入栈中,彻底规避递归深度限制,适配任意层级的ADLS Gen2目录结构
  • 遍历逻辑与原递归完全对齐:循环从栈中取出待遍历的目录路径,调用dbutils.fs.ls获取当前路径下的所有子项
  • 子项分类处理:遇到文件就累加大小,符合verbose条件时打印路径和大小;遇到目录就将目录路径压入栈中等待后续遍历
  • 功能完全兼容原实现:输入参数、返回值、单位换算规则均和原有递归版本一致,无需修改上层调用逻辑
完整可运行代码
from dbutils import FileInfo
from typing import List

def true_size(path: str, verbose: bool = True):
    total_size = 0.0
    # 用列表模拟栈,存储待遍历的目录路径
    dir_stack = [path]
    
    while dir_stack:
        # 弹出栈顶目录,遍历顺序和原递归深度优先逻辑完全一致
        current_dir = dir_stack.pop()
        path_list = dbutils.fs.ls(current_dir)
        
        for path_object in path_list:
            if path_object.size > 0:
                size_mb = path_object.size / 1e6
                if verbose:
                    print(f"{path_object.path}: {size_mb} MB")
                total_size += size_mb
            else:
                # 目录压入栈,等待后续遍历
                dir_stack.append(path_object.path)
    
    return total_size

可选优化:如果需要遍历超大规模目录,可将栈替换为collections.deque队列,使用popleft()取路径改为广度优先遍历,内存占用会更平稳,不影响最终统计结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 06:36:05