第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

打印(獲?。〩DFS路徑下所有的文件名(包括子目錄下的)

標(biāo)簽:
大數(shù)據(jù)

我的原创地址:https://dongkelun.com/2018/11/20/getAllHDFSFileNames/

前言

自己有个需求,如题,需要获取HDFS路径下所有的文件名,然后根据文件名用Spark进行后续操作。想了一下用Spark好像不太容易获取到,还要递归的去获取子目录下的文件名,于是查了一下,最后用Hadoop的API搞定,这里记录下,方便以后会用到。

1、数据

测试路径:/tmp/dkl,全路径名hdfs://ambari.master.com:8020/tmp/dkl

用hadoop的命令查看一下,该路径下都有哪些文件和文件夹

hadoop fs -ls /tmp/dkl


附图:


webp

image

2、完整代码

不多做解释了,直接看代码和结果吧(稍微封装了一下,有其它需求可以参考改写)

package com.dkl.leanring.spark.hdfsimport java.net.URI;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.FileSystem;import org.apache.hadoop.fs.Path;import org.apache.hadoop.fs.FileStatus;import org.apache.hadoop.fs.FileUtil;import scala.collection.mutable.ArrayBuffer/**
 * 主要目的是打印某个hdfs目录下所有的文件名,包括子目录下的
 * 其他的方法只是顺带示例,以便有其它需求可以参照改写
 */object FilesList {  def main(args: Array[String]): Unit = {    val path = "hdfs://ambari.master.com:8020/tmp/dkl"

    println("打印所有的文件名,包括子目录")
    listAllFiles(path)
    println("打印一级文件名")
    listFiles(path)
    println("打印一级目录名")
    listDirs(path)
    println("打印一级文件名和目录名")
    listFilesAndDirs(path)    //    getAllFiles(path).foreach(println)
    //    getFiles(path).foreach(println)
    //    getDirs(path).foreach(println)
  }  def getHdfs(path: String) = {    val conf = new Configuration()    FileSystem.get(URI.create(path), conf)
  }  def getFilesAndDirs(path: String): Array[Path] = {    val fs = getHdfs(path).listStatus(new Path(path))    FileUtil.stat2Paths(fs)
  }  /**************直接打印************/

  /**
   * 打印所有的文件名,包括子目录
   */
  def listAllFiles(path: String) {    val hdfs = getHdfs(path)    val listPath = getFilesAndDirs(path)
    listPath.foreach(path => {      if (hdfs.getFileStatus(path).isFile())
        println(path)      else {
        listAllFiles(path.toString())

      }
    })
  }  /**
   * 打印一级文件名
   */
  def listFiles(path: String) {
    getFilesAndDirs(path).filter(getHdfs(path).getFileStatus(_).isFile()).foreach(println)
  }  /**
   * 打印一级目录名
   */
  def listDirs(path: String) {
    getFilesAndDirs(path).filter(getHdfs(path).getFileStatus(_).isDirectory()).foreach(println)
  }  /**
   * 打印一级文件名和目录名
   */
  def listFilesAndDirs(path: String) {
    getFilesAndDirs(path).foreach(println)
  }  /**************直接打印************/

  /**************返回数组************/
  def getAllFiles(path: String): ArrayBuffer[Path] = {    val arr = ArrayBuffer[Path]()    val hdfs = getHdfs(path)    val listPath = getFilesAndDirs(path)
    listPath.foreach(path => {      if (hdfs.getFileStatus(path).isFile()) {
        arr += path
      } else {
        arr ++= getAllFiles(path.toString())
      }

    })
    arr
  }  def getFiles(path: String): Array[Path] = {
    getFilesAndDirs(path).filter(getHdfs(path).getFileStatus(_).isFile())
  }  def getDirs(path: String): Array[Path] = {
    getFilesAndDirs(path).filter(getHdfs(path).getFileStatus(_).isDirectory())
  }  /**************返回数组************/}

3、结果

webp

image



作者:董可伦
链接:https://www.jianshu.com/p/23b1e6bd9624


點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消