2014-04-28 18 views
11

Chcę przechodzić przez wszystkie pliki tekstowe w katalogu Hadoop i liczyć wszystkie wystąpienia słowa "błąd". Czy istnieje sposób na zrobienie hadoop fs -ls /users/ubuntu/, aby wyświetlić listę wszystkich plików w katalogu za pomocą interfejsu API Apache Spark Scala?Używanie Sparka do wyświetlania wszystkich plików w katalogu HDFS Hadoop?

z danego first example kontekst iskra wydaje się tylko dostęp do plików indywidualnie przez coś podobnego:

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

W moim problemem, nie wiem ile, ani nazwy plików w folderze HDFS uprzednio . Patrzyłem na spark context docs, ale nie mogłem znaleźć tego rodzaju funkcji.

Odpowiedz

14

Można użyć symbolu wieloznacznego:

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

Co jeśli chcę zgłosić nazwę pliku, w którym wystąpił błąd? –

+2

Użyj 'sc.wholeTextFiles'. Zobacz http://stackoverflow.com/questions/29521665/how-to-map-filenames-to-rdd-using-sc-textfiles3n-bucket-csv dla prawie tego pytania. –

1
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) 
Powiązane problemy