如何在hadoop文件系统中获得绝对路径?

eivnm1vs  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(748)

我想得到一个目录中所有文件的列表,以及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() 似乎是递归列出目录中文件的首选方法,因此对于这个用例来说,答案似乎有点麻烦。

cgfeq70w

cgfeq70w1#

依靠“tostring”可能不是个好主意。如果tostring的定义改变了怎么办。我认为做这样的事情更好

path.toUri().getRawPath()
qqrboqgw

qqrboqgw2#

这个 toString() 中的方法 org.apache.hadoop.fs.Path 返回完整路径。

相关问题