java - 如何在 Hadoop 文件系统中获取绝对路径?

标签 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()) {
    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
}

是否没有更直接的方式通过 Path API?

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

最佳答案

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

path.toUri().getRawPath()

关于java - 如何在 Hadoop 文件系统中获取绝对路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32156537/

相关文章:

java - createCriteria 在没有 Activity 事务的情况下无效(Struts 2.3.15、Spring 3.2.4、Hibernate 4.2.5 Final)

python - 在单个 mapreduce 中同时产生最大值和最小值

java - Cross Group (XG) 交易中超过 5 个实体组

Java Swing - 鼠标进入JFrame后组件消失

java - 无法解析构造函数'ArrayAdapter(匿名android.widget.SeekBar.OnSeekBarChangeListener,int,java.util.ArrayList <java.lang.Integer>)

hadoop - 在引擎盖下? PIG 在哪里保存中间结果/关系数据。?

hadoop - 配置单元查询生成多个小文件

scala - 方法依赖性和错误处理

Scala公共(public)方法: ';' expected but 'def' found

postgresql - Jooq 中的条件 onDuplicateKeyUpdate