web-dev-qa-db-fra.com

Utilisez Spark pour répertorier tous les fichiers d’un répertoire Hadoop HDFS?

Je veux parcourir tous les fichiers texte d'un répertoire Hadoop et compter toutes les occurrences du mot "erreur". Existe-t-il un moyen de créer un hadoop fs -ls /users/ubuntu/ pour répertorier tous les fichiers d'un répertoire à l'aide de l'API Apache Spark Scala?

Dans l'exemple premier exemple donné , le contexte d'étincelle semble uniquement accéder aux fichiers individuellement via quelque chose comme:

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

Dans mon problème, je ne sais pas combien ni le nom des fichiers dans le dossier HDFS au préalable. Regardé le spark context docs mais ne trouve pas ce type de fonctionnalité.

11
poliu2s

Vous pouvez utiliser un caractère générique:

val errorCount = sc.textFile("hdfs://some-directory/*")
                   .flatMap(_.split(" ")).filter(_ == "error").count
14
Daniel Darabos
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)
1
Animesh Raj Jha