有没有办法列出数据湖中所有文件夹和子文件夹中的所有文件?

时间:2019-10-09 22:19:06

标签: apache-spark apache-spark-sql databricks

我正在尝试列出所有文件夹和子文件夹中的所有文件。我正在尝试将所有内容放入RDD或数据帧中(我认为这并不重要,因为它只是文件名和路径的列表)。我在网上找到了一些看似有希望的代码,但似乎无能为力。我对Scala还是很陌生,所以也许我只是错过了一些简单的东西。

第一个代码示例:

import org.apache.spark.sql.functions.input_file_name

val inputPath: String = "mnt/rawdata/2019/01/01/corp/*.gz"

val df = spark.read.text(inputPath)
  .select(input_file_name, $"value")
  .as[(String, String)] // Optionally convert to Dataset
  .rdd // or RDD

第二个代码示例:

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]()
  }
}

val files = getListOfFiles("mnt/rawdata/2019/01/01/corp/")

1 个答案:

答案 0 :(得分:0)

Files.walk程序包中,有一种有用的nio方法用于递归树遍历。

import java.nio.file._
import scala.collection.JavaConverters._

val files = Files.walk(FileSystems.getDefault.getPath("mnt/rawdata/2019/01/01/corp")).iterator.asScala.toList

请注意,它会同时返回文件和目录,因此如果只需要文件,则需要进行过滤。