2015-05-04 17 views
5

Tôi có hàng ngàn tệp nén mỗi kích thước 2 GB nằm trong HDFS. Tôi đang sử dụng tia lửa để xử lý các tệp này. Tôi đang sử dụng phương thức Spark textFile() để tải các tệp từ HDFS. Câu hỏi của tôi là làm thế nào tôi có thể phân vùng lại dữ liệu để tôi có thể xử lý từng tệp song song. Hiện tại, mỗi tệp .gz được xử lý trong một tác vụ duy nhất. Vì vậy, nếu tôi xử lý 1000 tập tin chỉ có 1000 tác vụ được thực hiện. Tôi hiểu rằng các tệp nén không thể chia nhỏ được. Nhưng có cách nào khác tôi có thể sử dụng để chạy công việc của tôi nhanh hơn?Làm cách nào để phân vùng lại tệp nén trong Apache Spark?

Trả lời

3

Bạn có thể sử dụng rdd.repartition(#partitions) sau khi tải tệp. Điều này có một chi phí shuffle liên quan, vì vậy bạn cần phải đánh giá nếu đạt được hiệu suất song song bao gồm cho chi phí shuffle ban đầu này.

Một cách khác là thực hiện bất kỳ phép biến đổi nào (bản đồ, bộ lọc, ...) trên phân vùng ban đầu và sử dụng bất kỳ giai đoạn trộn nào đã có trong đường dẫn của bạn để phân vùng lại RDD. ví dụ.

rdd.map().filter().flatMap().sortBy(f, numPartitions=new#ofpartitions) 
+2

đây là những gì tôi hiện đang làm, nhưng khi tải dữ liệu không song song. Đối với một tập tin, nó chỉ thực hiện một nhiệm vụ trong khi tải. Tôi đã tự hỏi nếu chúng ta có thể song song trong khi tải dữ liệu. – None

+1

@hadooped không phải là tôi biết. Tôi hy vọng rằng ai đó biết rõ hơn. – maasg

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