Scala 使用Spark列出Hadoop HDFS目录中的所有文件?

Scala 使用Spark列出Hadoop HDFS目录中的所有文件?,scala,apache-spark,hadoop,Scala,Apache Spark,Hadoop,我想循环遍历Hadoop目录中的所有文本文件,并计算“error”一词的所有出现次数。有没有办法使用ApacheSpark Scala API在目录中列出所有文件 从给定情况来看,spark上下文似乎只通过以下方式单独访问文件: val file = spark.textFile("hdfs://target_load_file.txt") 在我的问题中,我事先不知道HDFS文件夹中有多少文件,也不知道文件名。查看了,但找不到此类功能。您可以使用通配符: val errorCount = sc

我想循环遍历Hadoop目录中的所有文本文件,并计算“error”一词的所有出现次数。有没有办法使用ApacheSpark Scala API在目录中列出所有文件

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

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

在我的问题中,我事先不知道HDFS文件夹中有多少文件,也不知道文件名。查看了,但找不到此类功能。

您可以使用通配符:

val errorCount = sc.textFile("hdfs://some-directory/*")
                   .flatMap(_.split(" ")).filter(_ == "error").count
对于本地安装,(可以通过阅读
/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)

如果我想报告发生错误的文件名,该怎么办?使用
sc.wholeTextFiles
。关于这个问题,请参阅。
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)