Giả sử tôi tạo ra như một RDD (Tôi đang sử dụng Pyspark):Spark quyết định cách phân vùng RDD như thế nào?
list_rdd = sc.parallelize(xrange(0, 20, 2), 6)
sau đó tôi in các yếu tố phân vùng với phương pháp glom()
và có được
[[0], [2, 4], [6, 8], [10], [12, 14], [16, 18]]
như thế nào Spark quyết định làm thế nào để phân vùng danh sách của tôi? Lựa chọn cụ thể của các yếu tố đến từ đâu? Nó có thể kết hợp chúng một cách khác nhau, để lại một số phần tử khác hơn 0 và 10 một mình, để tạo ra 6 phân vùng được yêu cầu. Trong lần chạy thứ hai, các phân vùng đều giống nhau.
Sử dụng một phạm vi lớn hơn, với 29 yếu tố, tôi nhận được các phân vùng trong mô hình của 2 yếu tố tiếp theo là ba yếu tố:
list_rdd = sc.parallelize(xrange(0, 30, 2), 6)
[[0, 2], [4, 6, 8], [10, 12], [14, 16, 18], [20, 22], [24, 26, 28]]
Sử dụng một phạm vi nhỏ hơn của 9 yếu tố tôi nhận được
list_rdd = sc.parallelize(xrange(0, 10, 2), 6)
[[], [0], [2], [4], [6], [8]]
Vì vậy, những gì tôi suy ra là Spark tạo ra các phân vùng bằng cách chia nhỏ danh sách thành một cấu hình trong đó nhỏ nhất có thể được theo sau bởi các bộ sưu tập lớn hơn và lặp lại.
Câu hỏi đặt ra là nếu có lý do đằng sau lựa chọn này, rất thanh lịch, nhưng nó cũng mang lại lợi thế về hiệu suất?