Использовать Spark для отображения всех файлов в каталоге Hadoop HDFS?

Я хочу перебрать все текстовые файлы в каталоге Hadoop и подсчитать все вхождения слова "ошибка". Есть ли способ сделать hadoop fs -ls /users/ubuntu/ для перечисления всех файлов в каталоге с API Apache Spark Scala?

Из приведенного первого примера контекст искры, по-видимому, имеет доступ только к отдельным файлам через нечто вроде:

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

В моей проблеме я не знаю, сколько и имена файлов в папке HDFS заблаговременно. Посмотрел искровые контекстные документы, но не смог найти такую ​​функциональность.

Ответ 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)