Я хотел бы получить список всех файлов в каталоге и его подкаталогах в файловой системе HDFS. Это метод, который я написал для этой цели рекурсивно чтение всех файлов в каталоге:Как получить абсолютные пути в файловой системе Hadoop?
def getAllFiles(dir: Path, fs: FileSystem, recursive: Boolean = true): Seq[Path] = {
val iter = fs.listFiles(dir, recursive)
val files = new ListBuffer[Path]()
while (iter.hasNext()) {
val p = iter.next().getPath
files.append(p)
}
files
}
В результате список org.apache.hadoop.fs.Path
элементов, которые мне нужно обработать в суб-секвенции шагов. Следовательно, мне нужен полный путь. Мой вопрос: что это лучший способ, чтобы получить полный абсолютный путь
До сих пор я использую рекурсивный метод для создания пути строки (Scala):
def fullPath(p: Path): String = {
if (p.isRoot())
p.getName
else
fullPath(p.getParent) + Path.SEPARATOR + p.getName
}
Есть ли не более прямолинеен через API путей?
я столкнулся вопрос #18034758, но с использованием listFiles()
, а не listStatus()
кажется предпочтительным способ рекурсивен списка файлов в каталоге, так что ответ кажется немного громоздким для этого случая использования.
Спасибо! Жаль, что это не описано здесь: https://hadoop.apache.org/docs/stable/api/org/apache/hadoop/fs/Path.html#toString-- – Carsten