2015-10-01 18 views
6

Giả sử tôi có một danh sách các chuỗi. Tôi lọc & sắp xếp chúng và thu thập kết quả cho trình điều khiển. Tuy nhiên, mọi thứ được phân phối, và mỗi RDD có một phần riêng của danh sách gốc. Vì vậy, làm thế nào để Spark đạt được thứ tự sắp xếp cuối cùng, liệu nó có hợp nhất các kết quả không?Spark đạt được thứ tự sắp xếp như thế nào?

Trả lời

3

Sorting trong Spark là một quá trình đa pha đòi hỏi shuffling:

  1. đầu vào RDD được lấy mẫu và mẫu này được sử dụng để tính toán ranh giới cho từng phân vùng đầu ra (sample tiếp theo collect)
  2. đầu vào RDD được phân chia sử dụng rangePartitioner có ranh giới được tính trong bước đầu tiên (partitionBy)
  3. mỗi phân đoạn từ bước thứ hai được sắp xếp cục bộ (mapPartitions)

Khi dữ liệu được thu thập tất cả những gì còn lại là tuân theo thứ tự do trình phân vùng xác định.

bước trên được phản ánh rõ ràng trong một chuỗi debug:

scala> val rdd = sc.parallelize(Seq(4, 2, 5, 3, 1)) 
rdd: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[0] at ... 

scala> rdd.sortBy(identity).toDebugString 
res1: String = 
(6) MapPartitionsRDD[10] at sortBy at <console>:24 [] // Sort partitions 
| ShuffledRDD[9] at sortBy at <console>:24 [] // Shuffle 
+-(8) MapPartitionsRDD[6] at sortBy at <console>:24 [] // Pre-shuffle steps 
    | ParallelCollectionRDD[0] at parallelize at <console>:21 [] // Parallelize 
Các vấn đề liên quan