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
SELECT
nhữ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
while
chu kỳ cho đến khi bạn có thểfetch
hà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_rows
không đổi để đọc trong bộ nhớ và cập nhậti
lậ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
,upperBound
và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
.