web-dev-qa-db-ja.com

Sparkを使用して、Hadoop HDFSディレクトリ内のすべてのファイルをリストしますか?

Hadoop dir内のすべてのテキストファイルをループ処理して、Wordの「エラー」の発生をすべてカウントしたいと思います。 hadoop fs -ls /users/ubuntu/を実行して、Apache Spark Scala APIを使用して、ディレクトリ内のすべてのファイルを一覧表示する方法はありますか?

与えられた 最初の例 から、sparkコンテキストは次のようなものを介してファイルに個別にのみアクセスするようです:

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

私の問題では、HDFSフォルダー内のファイルの数と名前が事前にわかりません。 spark context docs を調べましたが、この種の機能を見つけることができませんでした。

13
poliu2s

ワイルドカードを使用できます。

val errorCount = sc.textFile("hdfs://some-directory/*")
                   .flatMap(_.split(" ")).filter(_ == "error").count
15
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