【问题标题】:Scala & DataBricks: Getting a list of FilesScala & DataBricks:获取文件列表
【发布时间】:2019-03-10 02:02:51
【问题描述】:

我正在尝试在 Scala 中的 Databricks 上的 S3 存储桶中创建文件列表,然后通过正则表达式进行拆分。我对 Scala 很陌生。 python 等价物是

all_files = map(lambda x: x.path, dbutils.fs.ls(folder))
filtered_files = filter(lambda name: True if pattern.match(name) else False, all_files)

但我想在 Scala 中执行此操作。

来自https://alvinalexander.com/scala/how-to-list-files-in-directory-filter-names-scala

import java.io.File
def getListOfFiles(dir: String):List[File] = {
    val d = new File(dir)
    if (d.exists && d.isDirectory) {
        d.listFiles.filter(_.isFile).toList
    } else {
        List[File]()
    }
}

但是,这会产生一个空列表。

我也想过

var all_files: List[Any] = List(dbutils.fs.ls("s3://bucket"))

但这会产生一个列表,例如(长度为 1)

all_files: List[Any] = List(WrappedArray(FileInfo(s3://bucket/.internal_name.pl.swp, .internal_name.pl.swp, 12288), FileInfo(s3://bucket/file0, 10223616), FileInfo(s3://bucket/, file1, 0), ....)

长度为 1。我无法将其转换为数据帧,正如 How to iterate scala wrappedArray? (Spark) 所建议的那样,这是不可用的。

如何在 Scala 中生成文件列表,然后遍历它们?

【问题讨论】:

    标签: scala apache-spark amazon-s3 databricks


    【解决方案1】:

    你应该这样做:

    val name : String = ???   
    val all_files : Seq[String] = dbutils.fs.ls("s3://bucket").map(_.path).filter(_.matches(name))
    

    【讨论】:

    • 谢谢!顺便说一句,你怎么称呼这个_.?它似乎是一个默认输入,类似于 Perl 的$_
    猜你喜欢
    • 2022-01-11
    • 2021-12-23
    • 2020-06-28
    • 2021-06-18
    • 2011-09-15
    • 2013-03-29
    • 1970-01-01
    • 1970-01-01
    • 2021-06-17
    相关资源
    最近更新 更多