Есть ли способ перечислить все файлы во всех папках и подпапках в озере данных? - PullRequest
0 голосов
/ 10 октября 2019

Я пытаюсь перечислить все файлы во всех папках и подпапках. Я пытаюсь поместить все в 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 голосов
/ 10 октября 2019

Существует полезный метод 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

Просто обратите внимание, что он возвращает как файлы, так и каталоги, поэтому вам необходимо выполнить фильтрацию, если вам нужны только файлы.

...