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

Java 如何在Hadoop文件系统中获得绝对路径?,java,scala,hadoop,apache-spark,hdfs,Java,Scala,Hadoop,Apache Spark,Hdfs,我想得到一个目录中所有文件的列表,以及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()) {

我想得到一个目录中所有文件的列表,以及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):

难道没有更直接的途径通过Path API吗


我遇到了一个问题,但是使用
listFiles()
而不是
listStatus()
似乎是递归列出目录中文件的首选方法,因此对于这个用例,答案似乎有点麻烦。

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

依赖“toString”可能不是一个好主意。如果toString的定义发生变化怎么办。我认为做这样的事情更好

path.toUri().getRawPath()

谢谢太糟糕了,这里没有记录这一点:
path.toUri().getRawPath()