Databricks DBFS中tree命令缺失如何快速统计文件大小?
方案1:使用Databricks原生dbutils工具(推荐)
该方式无需安装任何额外依赖,直接调用DBFS元数据接口统计,速度远高于shell层的ls/tree命令,适合长期使用。
你可以直接在Python单元格运行以下代码,实现和tree --du -h | grep "G]"一致的效果,即列出/dbfs下所有大小≥1G的目录/文件:
from pathlib import Path def stat_dbfs_size(root_path: str = "/", min_size_gb: int = 1) -> None: min_size_threshold = min_size_gb * 1024 ** 3 # 递归遍历所有文件条目 all_items = dbutils.fs.ls(root_path, recurse=True) dir_size_map = {} file_size_list = [] for item in all_items: if item.isDir(): continue # 累计目录总大小 parent_dir = str(Path(item.path).parent).replace("dbfs:", "/dbfs/") dir_size_map[parent_dir] = dir_size_map.get(parent_dir, 0) + item.size # 统计单文件大小 if item.size >= min_size_threshold: file_size_list.append((item.size, item.path.replace("dbfs:", "/dbfs/"))) # 输出符合大小要求的目录 for dir_path, total_size in dir_size_map.items(): if total_size >= min_size_threshold: size_gb = round(total_size / 1024**3, 2) print(f"{size_gb} GB\t{dir_path}") # 输出符合大小要求的单文件 for file_size, file_path in file_size_list: size_gb = round(file_size / 1024**3, 2) print(f"{size_gb} GB\t{file_path}") # 调用统计根目录下≥1G的条目 stat_dbfs_size("/", min_size_gb=1)
注意:dbutils.fs.ls的recurse参数仅在Databricks Runtime 11.0及以上版本支持,低版本可以自行实现递归遍历逻辑即可。
方案2:安装tree命令(临时使用可选)
如果确实需要使用tree命令,可以通过apt直接在集群节点安装,仅需要在%sh单元格执行以下安装命令即可:
%sh apt-get update > /dev/null && apt-get install -y tree > /dev/null
安装完成后即可运行你原来的统计命令:
%sh cd /dbfs && tree --du -h | grep "G]"
注意:Databricks集群节点的系统修改是非持久化的,集群重启后安装的tree会失效,需要重新执行安装命令。
内容的提问来源于stack exchange,提问作者soMuchToLearnAndShare
相关产品推荐
相关产品推荐

