如何在 Hadoop 文件系统中获取绝对路径?
How to get absolute paths in Hadoop Filesystem?
我想获取 HDFS 文件系统中目录及其子目录中所有文件的列表。这是我为了递归读取目录中的所有文件而编写的方法:
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()
似乎是递归列出目录中文件的首选方式,所以答案似乎有点这个用例很麻烦。
toString()
方法在org.apache.hadoop.fs.Path
returns完整路径。
依赖"toString"可能不是一个好主意。如果 toString 的定义发生变化怎么办。我认为最好做一些像
这样的事情
path.toUri().getRawPath()
我想获取 HDFS 文件系统中目录及其子目录中所有文件的列表。这是我为了递归读取目录中的所有文件而编写的方法:
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()
似乎是递归列出目录中文件的首选方式,所以答案似乎有点这个用例很麻烦。
toString()
方法在org.apache.hadoop.fs.Path
returns完整路径。
依赖"toString"可能不是一个好主意。如果 toString 的定义发生变化怎么办。我认为最好做一些像
这样的事情path.toUri().getRawPath()