如何在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
相关产品推荐
相关产品推荐

