Bạn đang cố tải trong RAM quá nhiều dữ liệu . Trước tiên, bạn nên giảm lượng dữ liệu SQL truy xuất bạn trước khi nó đến Spark và tối ưu hóa nó bằng cách sử dụng các thông số tia lửa, ví dụ: phân vùng .
Hãy xem xét một hoặc nhiều cách tối ưu hóa sau:
- Chỉ định trong
SELECTnhững cột nào để xem rõ ràng, chỉ những cột bạn cần, nếu có thể; - (Truy vấn thô) Lặp lại trong một
whilechu kỳ cho đến khi bạn có thểfetchhàng bằng cách lặp lại từng hàng. Các kỹ thuật sau có thể hoạt động bằng cách đặt mộtn_rowskhông đổi để đọc trong bộ nhớ và cập nhậtilập chỉ mục mỗi lần đạp xe:
LIMIT i,i+n_rows
BETWEEN i AND i+n_rows
WHILE primaryKey >= i AND primaryKey < i+n_rows
- Sử dụng phân vùng . Sử dụng
partitionColumn,lowerBound,upperBoundvànumPartitions(Tham khảo 1) và (Tham chiếu 2) :
partitionColumn chọn cột sẽ được sử dụng để xác định cách tách dữ liệu (Ví dụ: khóa chính ).
lowerBound thiết lập giá trị tối thiểu của partitionColumn sẽ được tìm nạp.
upperBound thiết lập giá trị tối đa của partitionColumn sẽ được tìm nạp.
numPartitions nghĩa là bạn muốn đặt bao nhiêu kết nối song song để đọc dữ liệu thông qua RDBMS.
Vì vậy, Spark sẽ truy xuất tập dữ liệu của bạn bằng cách sử dụng các hàng mà bạn sẽ nhận được nếu bạn đang thực hiện SELECT * FROM table WHERE partitionColumn BETWEEN lowerBound AND upperBound .