2017-01-28 31 views
6

Làm cách nào để đọc tệp dưới dạng luồng từ hdfs bằng Apache Spark Java? Tôi không muốn đọc toàn bộ tệp, tôi muốn có luồng tệp để dừng đọc tệp khi một số điều kiện được đáp ứng, làm cách nào tôi có thể thực hiện với Apache Spark?Apache Spark đọc tệp dưới dạng luồng từ HDFS

+0

Chck this :: https://github.com/apache/spark/blob/master/examples/src/main/scala/org/apache/spark/examples/streaming/HdfsWordCount.scala – yoga

+0

Ví dụ này không phải là liên quan đến câu hỏi của tôi. – Maksym

+0

Bạn có thể giải thích rõ hơn những gì bạn đang cố gắng đạt được không? Tại sao bạn cần nó như một dòng (trái ngược với việc chỉ đọc nó như là một RDD/Dataframe)? Bạn đang hỏi làm thế nào để có tia lửa streaming đọc nội dung của một thư mục HDFS và dừng lại khi nó được thực hiện (thay vì chờ đợi cho khoảng thời gian tiếp theo)? Bạn cũng đang nói về DStream hoặc phát trực tuyến có cấu trúc? –

Trả lời

1

Bạn có thể sử dụng tập tin HDFS trực tuyến sử dụng phương pháp ssc

val ssc = new StreamingContext (sparkConf, Giây (batchTime))

val dStream = ssc.fileStream [LongWritable, Text, TextInputFormat] ( streamDirectory , (x: Đường dẫn) => true, newFilesOnly = false)

Sử dụng trên api bộ lọc param Chức năng lọc đường dẫn để xử lý.

Nếu điều kiện của bạn không có đường dẫn/tên tệp và dựa trên dữ liệu, thì bạn cần dừng ngữ cảnh phát trực tuyến nếu điều kiện thỏa mãn.

Đối với điều này, bạn cần sử dụng triển khai chuỗi, 1) Trong một chuỗi bạn cần phải tiếp tục kiểm tra ngữ cảnh phát trực tuyến bị dừng và nếu ssc dừng lại thì hãy thông báo cho luồng khác chờ và tạo ngữ cảnh phát trực tuyến mới.

2) Trong chuỗi thứ hai, bạn cần kiểm tra điều kiện và nếu điều kiện thỏa mãn thì dừng ngữ cảnh phát trực tiếp.

Vui lòng cho tôi biết nếu bạn cần giải thích.

+0

Sự cố mà tôi có ví dụ: hai tệp tin và tôi chỉ muốn đọc N dòng từ mỗi (từ vài đến hàng tỷ). Giải pháp của bạn sẽ tốn kém nhiều. – Maksym

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