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

请求修改Azure Databricks Scala代码以递归遍历子文件夹生成DataFrame

递归遍历文件夹生成文件列表DataFrame的Scala实现

以下是修改后的代码,支持递归遍历指定路径下的所有子文件夹,将所有文件的属性汇总到同一个DataFrame中:

import org.apache.spark.sql.DataFrame

def GetFiles(path: String): DataFrame = {
  try {
    // 获取当前路径下的所有文件和文件夹
    val items = dbutils.fs.ls(path)
    
    // 分离当前路径下的文件和文件夹
    val (files, folders) = items.partition(!_.isDir)
    
    // 将当前文件转换为DataFrame
    val currentFilesDF = spark.createDataFrame(
      files.map { info =>
        (info.path, info.name, info.size, info.modificationTime)
      }
    ).toDF("path", "name", "size", "modificationTime")
    
    // 递归遍历所有子文件夹,收集子文件夹的文件DataFrame
    val subFolderDFs = folders.map(folder => GetFiles(folder.path))
    
    // 合并当前文件DataFrame和所有子文件夹的DataFrame
    val allFilesDF = subFolderDFs.foldLeft(currentFilesDF)(_.union(_))
    
    // 按文件名排序返回
    allFilesDF.orderBy("name")
  } catch {
    case e: Exception => 
      // 捕获异常并返回空DataFrame
      spark.emptyDataFrame
  }
}

关键修改点说明:

  • 使用partition(!_.isDir)区分当前路径下的文件和文件夹,通过isDir属性判断对象类型
  • 对每个子文件夹递归调用GetFiles方法,收集所有子层级的文件DataFrame
  • 通过foldLeft结合union操作合并所有DataFrame,实现全路径文件汇总
  • 保留原有的异常处理逻辑,遇到错误时返回空DataFrame

内容的提问来源于stack exchange,提问作者Diego Eick Moreira

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 10:02:10