Anda mencoba memuat di RAM terlalu banyak data . Anda harus terlebih dahulu mengurangi jumlah data yang diambil SQL sebelum mencapai Spark dan optimalkan menggunakan parameter percikan, misalnya partisi .
Pertimbangkan satu atau beberapa pengoptimalan berikut:
- Tentukan di
SELECT
kolom apa yang harus dilihat secara eksplisit, hanya yang Anda butuhkan, jika memungkinkan; - (Kueri mentah) Loop dalam
while
siklus sampai Anda dapatfetch
baris dengan mengulang setiap baris. Teknik berikut dapat bekerja dengan menyeteln_rows
konstanta untuk membaca dalam memori dan memperbaruii
indeks setiap siklus:
LIMIT i,i+n_rows
BETWEEN i AND i+n_rows
WHILE primaryKey >= i AND primaryKey < i+n_rows
- Menggunakan partisi . Gunakan
partitionColumn
,lowerBound
,upperBound
dannumPartitions
(Referensi 1) dan (Referensi 2) :
partitionColumn
pilih kolom yang akan digunakan untuk menentukan cara membagi data (Misalnya kunci utama ).
lowerBound
menetapkan nilai minimum dari partitionColumn
yang akan diambil.
upperBound
menetapkan nilai maksimum dari partitionColumn
yang akan diambil.
numPartitions
berarti berapa banyak koneksi paralel yang ingin Anda atur untuk membaca data melalui RDBMS.
Jadi Spark akan mengambil set data Anda menggunakan baris yang akan Anda dapatkan jika Anda melakukan SELECT * FROM table WHERE partitionColumn BETWEEN lowerBound AND upperBound
.