Khái niệm:
Shuffling là quá trình di chuyển dữ liệu giữa các máy (nodes) trong một cluster khi thực hiện các thao tác nhóm hay kết hợp dữ liệu, như groupByKey.
Tại sao cần quan tâm:
Vì dữ liệu trong Spark được phân phối trên nhiều máy, nên khi thực hiện một thao tác như groupByKey để gom tất cả các giá trị của cùng một khóa về cùng một máy, Spark phải chuyển dữ liệu qua mạng. Việc này gây ra độ trễ (latency) và ảnh hưởng đến hiệu năng, nhất là với dữ liệu lớn.
Giả sử chúng ta có một RDD gồm các đối tượng CFFPurchase với thông tin:
Tạo Pair RDD:
Ta chuyển RDD ban đầu thành cặp key-value với:
customerIdprice
Ví dụ: (100, 20.0), (200, 35.0), (100, 15.0),...Thực hiện groupByKey:
Khi gọi groupByKey, Spark sẽ gom tất cả các giá trị (giá vé) của mỗi customerId lại với nhau.
[20.0, 15.0].
Tuy nhiên, vì các giá trị có thể nằm trên nhiều máy, nên Spark phải di chuyển (shuffle) dữ liệu để tất cả giá trị của key 100 tập trung lại trên một máy duy nhất.Tính toán sau khi shuffling:
Sau khi dữ liệu đã được gom lại, ta có thể dễ dàng tính số chuyến đi (dùng size) và tổng tiền (dùng sum) cho từng khách hàng.
groupByKey.