Spark:遍历HDFS子文件夹并查找名称为" X"的所有文件。

时间:2017-05-10 01:59:00

标签: apache-spark hdfs

我有一个HDFS路径,我想遍历所有子文件夹,找到名称为" X"的所有文件。

我试过这样做:

FileSystem.get( sc.hadoopConfiguration )
  .listStatus( new Path("hdfs://..."))
  .foreach( x => println(x.getPath))

但是这只搜索1级内的文件,我想要所有级别。

1 个答案:

答案 0 :(得分:1)

您需要递归获取所有文件。循环遍历路径并获取所有文件,如果它是一个目录再次调用相同的函数。 下面是一个简单的代码,您可以将其修改为配置和测试。

var fileSystem : FileSystem = _
  var configuration: Configuration = _

  def init() {
    configuration = new Configuration
    fileSystem = FileSystem.get(configuration)
    val fileStatus: Array[FileStatus] = fileSystem.listStatus(new Path(""))
    getAllFiles(fileStatus)
  }

  def getAllFiles(fileStatus: Array[FileStatus]) {
    fileStatus.map(fs  => {
      if (fs.isDirectory)
        getAllFiles(fileSystem.listStatus(fs.getPath))
      else fs
    })
  }

获取文件列表后,还会过滤包含“X”的文件。