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

如何在Databricks中用Spark获取S3指定路径的一级文件夹列表

问题描述

我使用以下代码获取指定S3路径下的内容,但它返回该路径下的所有文件夹、子文件夹及文件。我仅需要获取s3://production/product/路径下的一级文件夹名称:

def get_dir_content(ls_path):
  dir_paths = dbutils.fs.ls(ls_path)
  subdir_paths = [get_dir_content(p.path) for p in dir_paths if p.isDir() and p.path != ls_path]
  flat_subdir_paths = [p for subdir in subdir_paths for p in subdir]
  return list(map(lambda p: p.path, dir_paths)) + flat_subdir_paths
    

paths = get_dir_content('s3://production/product/')
[print(p) for p in paths]

当前输出返回所有层级的文件夹及子目录,内容过多。请问该如何修改这段代码?


解决方案

去掉递归逻辑,直接筛选当前路径下的一级文件夹即可,不需要遍历子目录:

def get_first_level_dirs(ls_path):
    # 获取指定路径下的所有内容
    dir_contents = dbutils.fs.ls(ls_path)
    # 筛选出当前路径下的一级文件夹(排除自身路径)
    first_level_dirs = [item.path for item in dir_contents if item.isDir() and item.path != ls_path]
    return first_level_dirs

# 调用函数获取一级文件夹
paths = get_first_level_dirs('s3://production/product/')
# 打印结果
for p in paths:
    print(p)

说明

  • 原代码通过递归调用遍历了所有子文件夹,导致返回全层级内容
  • 修改后的代码仅处理当前路径下的内容,通过item.isDir()筛选出文件夹,确保只返回一级目录
  • 如果需要获取文件夹名称(而非完整路径),可将item.path替换为item.name

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 18:27:31