【问题标题】:Use Spark to list all files in a Hadoop HDFS directory?使用 Spark 列出 Hadoop HDFS 目录中的所有文件?
【发布时间】:2014-04-28 22:31:18
【问题描述】:

我想遍历 Hadoop 目录中的所有文本文件并计算所有出现的单词“错误”。有没有办法使用 Apache Spark Scala API 使用hadoop fs -ls /users/ubuntu/ 列出目录中的所有文件?

从给定的first example 来看,spark 上下文似乎只能通过以下方式单独访问文件:

val file = spark.textFile("hdfs://target_load_file.txt")

在我的问题中,我事先不知道 HDFS 文件夹中有多少文件,也不知道文件的名称。看了spark context docs,没找到这种功能。

【问题讨论】:

    标签: scala apache-spark hadoop


    【解决方案1】:

    您可以使用通配符:

    val errorCount = sc.textFile("hdfs://some-directory/*")
                       .flatMap(_.split(" ")).filter(_ == "error").count
    

    【讨论】:

    【解决方案2】:
    import org.apache.hadoop.fs.{FileSystem, FileUtil, Path}
    import scala.collection.mutable.Stack
    
    
    val fs = FileSystem.get( sc.hadoopConfiguration )
    var dirs = Stack[String]()
    val files = scala.collection.mutable.ListBuffer.empty[String]
    val fs = FileSystem.get(sc.hadoopConfiguration)
    
    dirs.push("/user/username/")
    
    while(!dirs.isEmpty){
        val status = fs.listStatus(new Path(dirs.pop()))
        status.foreach(x=> if(x.isDirectory) dirs.push(x.getPath.toString) else 
        files+= x.getPath.toString)
    }
    files.foreach(println)
    

    【讨论】:

    • 这是对标题中所述问题的最严格正确答案。接受的答案为 OP 提供了对问题本身要求的更具体的答案,但来自谷歌的任何人都可能会寻找这个。
    【解决方案3】:

    对于本地安装,(通过阅读/etc/hadoop/core.xml可以找到hdfs默认路径fs.defaultFS):

    例如,

    import org.apache.hadoop.fs.{FileSystem, Path}
    
    val conf = sc.hadoopConfiguration
    conf.set("fs.defaultFS", "hdfs://localhost:9000")
    val hdfs: org.apache.hadoop.fs.FileSystem = org.apache.hadoop.fs.FileSystem.get(conf)
     
    val fileStatus = hdfs.listStatus(new Path("hdfs://localhost:9000/foldername/"))
    val fileList = fileStatus.map(x => x.getPath.toString)
    fileList.foreach(println)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-06-22
      • 2016-03-30
      • 1970-01-01
      • 1970-01-01
      • 2017-09-29
      • 2017-02-16
      • 2011-06-13
      相关资源
      最近更新 更多