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
SELECTkolom apa yang harus dilihat secara eksplisit, hanya yang Anda butuhkan, jika memungkinkan; - (Kueri mentah) Loop dalam
whilesiklus sampai Anda dapatfetchbaris dengan mengulang setiap baris. Teknik berikut dapat bekerja dengan menyeteln_rowskonstanta untuk membaca dalam memori dan memperbaruiiindeks 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,upperBounddannumPartitions(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 .