2015-08-03 18 views
11

Tôi đã cố gắng lọc ra ngày cho các tệp cụ thể bằng cách sử dụng tia lửa Apache bên trong tệp cho hàm RDD sc.textFile().Cách sử dụng regex để bao gồm/loại trừ một số tệp đầu vào trong sc.textFile?

Tôi đã cố gắng làm như sau:

sc.textFile("/user/Orders/201507(2[7-9]{1}|3[0-1]{1})*") 

này phải phù hợp với những điều sau đây:

/user/Orders/201507270010033.gz 
/user/Orders/201507300060052.gz 

Bất kỳ ý tưởng làm thế nào để đạt được điều này?

Trả lời

28

Nhìn vào the accepted answer, có vẻ như sử dụng một số dạng cú pháp glob. Nó cũng cho thấy rằng API là một sự tiếp xúc của Hadoop's FileInputFormat.

Tìm kiếm tiết lộ rằng đường dẫn được cung cấp cho FileInputFormat 's addInputPath hoặc setInputPath"may represent a file, a directory, or, by using glob, a collection of files and directories". Có lẽ, SparkContext cũng sử dụng các API đó để đặt đường dẫn.

Các syntax of the glob bao gồm:

  • * (trận đấu 0 hoặc nhân vật hơn)
  • ? (trận ký tự đơn)
  • [ab] (nhân vật lớp)
  • [^ab] (phủ nhận lớp nhân vật)
  • [a-b] (dải ký tự)
  • {a,b} (luân phiên)
  • \c (thoát nhân vật)

Tiếp theo ví dụ trong câu trả lời được chấp nhận, chúng ta có thể viết đường dẫn của bạn như:

sc.textFile("/user/Orders/2015072[7-9]*,/user/Orders/2015073[0-1]*") 

Nó Chưa rõ vì sao cú pháp luân phiên có thể được sử dụng ở đây, vì dấu phẩy được sử dụng để phân định một danh sách các đường dẫn (như được hiển thị ở trên). Theo bình luận zero323 's, không thoát là cần thiết:

sc.textFile("/user/Orders/201507{2[7-9],3[0-1]}*") 
+0

Cảm ơn, '{a, b}' cho luân phiên, không phải những gì tôi đã cố gắng: '(a | b)'. –

+0

Tôi đã cố gắng loại trừ các tệp khỏi một loại nhất định, thật không may, không thành công, bạn có thể cung cấp ví dụ không? một số thứ như *.^tmp – Modi

Các vấn đề liên quan