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

如何将Databricks递归列Azure存储文件的Python代码转为Scala

Databricks 递归列出文件的Scala等效实现

正确可运行代码

函数定义:

// 导入FileInfo类型,也可直接写全类名避免导入
import com.databricks.backend.daemon.dbutils.FileInfo

def deepLs(path: String): Iterator[FileInfo] = {
  // 遍历当前路径下所有条目,用flatMap合并递归返回的结果
  dbutils.fs.ls(path).iterator.flatMap { entry =>
    if (entry.path.endsWith("/")) {
      // 文件夹:递归遍历子路径
      deepLs(entry.path)
    } else {
      // 文件:直接返回当前条目
      Iterator.single(entry)
    }
  }
}

调用方法和原Python逻辑完全对应:

// 遍历指定路径下所有嵌套文件,转成List存储
val files = deepLs("srcpath/2021/06/16/").toList
// 打印所有文件名
files.foreach(entry => println(entry.name))

原有代码错误说明

你之前编写的代码触发报错的核心原因如下:

  • Scala无法自动推导递归函数的返回值类型,递归函数必须显式声明返回类型
  • Python的yield是生成器语法,用于逐个产出元素,而Scala的return会直接终止整个函数执行、返回单个值,和预期返回所有文件集合的逻辑完全不符
  • 取路径最后一个字符的逻辑不规范:x.path(-1)实际返回Char类型字符,不仅会导致类型匹配错误,路径为空时还会触发索引越界,用endsWith("/")判断文件夹更稳妥
  • 手动指定的返回类型为String,和实际要返回的FileInfo集合类型不匹配,触发类型不兼容报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 20:45:01