Scala列出hdfs目录下的文件

@羲凡——只为了更好的活着

Scala列出hdfs目录下的文件

在最近的一个业务中需要列出hdfs上某个目录下的所有文件,再过滤出自己需要的文件,进行spark循环,在网上找到了篇博客非常有用,我稍微简化了一下,拿走不谢。
如果查看原博主文章点这里 https://blog.csdn.net/dkl12/article/details/84312307 尊重原博主。下面字节上代码:

package csdn
import java.net.URI
import org.apache.hadoop.conf.Configuration
import org.apache.hadoop.fs.{FileSystem, FileUtil, Path}
import scala.collection.mutable.ArrayBuffer

object SparkListHdfsFile {
  def main(args: Array[String]): Unit = {
    val path = "/aarontest/dqas"
    //生成FileSystem
    def getHdfs(path: String): FileSystem = {
      val conf = new Configuration()
      FileSystem.newInstance(URI.create(path), conf)
    }

    //获取目录下的一级文件和目录
    def getFilesAndDirs(path: String): Array[Path] = {
      val fs = getHdfs(path).listStatus(new Path(path))
      FileUtil.stat2Paths(fs)
    }
    //获取目录下的一级文件
    def getFiles(path: String): Array[String] = {
      getFilesAndDirs(path).filter(getHdfs(path).getFileStatus(_).isFile())
      .map(_.toString)
    }
    //获取目录下的一级目录
    def getDirs(path: String): Array[String] = {
      getFilesAndDirs(path).filter(getHdfs(path).getFileStatus(_).isDirectory)
      .map(_.toString)
    }
    //获取目录下的所有文件
    def getAllFiles(path: String): ArrayBuffer[String] = {
      val arr = ArrayBuffer[String]()
      val hdfs = getHdfs(path)
      val getPath = getFilesAndDirs(path)
      getPath.foreach(patha => {
        if (hdfs.getFileStatus(patha).isFile())
          arr += patha.toString
        else {
          arr ++= getAllFiles(patha.toString())
        }
      })
      arr
    }

    println("获取目录下的一级文件和目录")
    getFilesAndDirs(path).foreach(println)
    println("获取目录下的一级文件")
    getFiles(path).foreach(println)
    println("获取目录下的一级目录")
    getDirs(path).foreach(println)
    println("获取目录下所有文件")
    getAllFiles(path).foreach(println)
  }
}

结果展示:

获取目录下的一级文件和目录
hdfs://ns/aarontest/dqas/SparkDqas.jar
hdfs://ns/aarontest/dqas/dqasToMysql.sh
hdfs://ns/aarontest/dqas/jsr166e-1.1.0.jar
hdfs://ns/aarontest/dqas/mysql-connector-java-5.1.38.jar
hdfs://ns/aarontest/dqas/spark-cassandra-connector_2.11-2.3.1.jar
hdfs://ns/aarontest/dqas/tmpData
获取目录下的一级文件
hdfs://ns/aarontest/dqas/SparkDqas.jar
hdfs://ns/aarontest/dqas/dqasToMysql.sh
hdfs://ns/aarontest/dqas/jsr166e-1.1.0.jar
hdfs://ns/aarontest/dqas/mysql-connector-java-5.1.38.jar
hdfs://ns/aarontest/dqas/spark-cassandra-connector_2.11-2.3.1.jar
获取目录下的一级目录
hdfs://ns/aarontest/dqas/tmpData
获取目录下所有文件
hdfs://ns/aarontest/dqas/SparkDqas.jar
hdfs://ns/aarontest/dqas/dqasToMysql.sh
hdfs://ns/aarontest/dqas/jsr166e-1.1.0.jar
hdfs://ns/aarontest/dqas/mysql-connector-java-5.1.38.jar
hdfs://ns/aarontest/dqas/spark-cassandra-connector_2.11-2.3.1.jar
hdfs://ns/aarontest/dqas/tmpData/_SUCCESS
hdfs://ns/aarontest/dqas/tmpData/part-00000-b681c97b-2e6953-c000.csv

====================================================================

@羲凡——只为了更好的活着

若对博客中有任何问题,欢迎留言交流

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值