2014-04-28 17 views
11

Tôi muốn lặp qua tất cả các tệp văn bản trong một thư mục Hadoop và đếm tất cả các lần xuất hiện của từ "lỗi". Có cách nào để thực hiện hadoop fs -ls /users/ubuntu/ để liệt kê tất cả các tệp trong một thư mục có API Apache Spark Scala không?Sử dụng Spark để liệt kê tất cả các tệp trong thư mục Hadoop HDFS?

Từ trao first example, bối cảnh tia lửa dường như chỉ truy xuất file riêng thông qua một cái gì đó như:

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

Trong vấn đề của tôi, tôi không biết có bao nhiêu cũng không phải là tên của các tập tin trong thư mục HDFS trước . Nhìn vào spark context docs nhưng không thể tìm thấy loại chức năng này.

Trả lời

14

Bạn có thể sử dụng một ký tự đại diện:

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

gì nếu tôi muốn thông báo tên của tập tin mà các lỗi đã xảy ra? –

+2

Sử dụng 'sc.wholeTextFiles'. Xem http://stackoverflow.com/questions/29521665/how-to-map-filenames-to-rdd-using-sc-textfiles3n-bucket-csv cho khá nhiều câu hỏi đó. –

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) 
Các vấn đề liên quan