Как перечислить путь к файлам внутри каталога и подкаталога Hdfs? - PullRequest
0 голосов
/ 21 сентября 2018

Не удалось найти способ перечисления всех файлов в каталоге и подкаталогах.

Вот код, который я использую, который перечисляет файлы в определенном каталоге, но файлы, если внутри подкаталога есть:

val conf = new Configuration()
val fs = FileSystem.get(new java.net.URI("hdfs://servername/"), conf)
val status = fs.listStatus(new Path("path/to/folder/"))
status.foreach { x => println(x.getPath.toString()) }

приведенный выше код перечисляет все файлы в каталоге, но мне нужно, чтобы он был рекурсивным.

1 Ответ

0 голосов
/ 21 сентября 2018

Вы можете пойти на рекурсию, когда обнаружите новую папку:

val hdfs = FileSystem.get(new Configuration())

def listFileNames(hdfsPath: String): List[String] = {

  hdfs
    .listStatus(new Path(hdfsPath))
    .flatMap { status =>
      // If it's a file:
      if (status.isFile)
        List(hdfsPath + "/" + status.getPath.getName)
      // If it's a dir and we're in a recursive option:
      else
        listFileNames(hdfsPath + "/" + status.getPath.getName)
    }
    .toList
    .sorted
}
...