Stai tentando di caricare nella RAM troppi dati . Dovresti prima ridurre la quantità di dati che SQL ti recupera prima che raggiunga Spark e ottimizzalo utilizzando parametri spark, ad esempio partizioni .
Prendi in considerazione una o più di queste ottimizzazioni:
- Specificare in
SELECT
quali colonne visualizzare in modo esplicito, solo quelle necessarie, se possibile; - (Query non elaborata) Ciclo in un
while
ciclo finché non riesci afetch
righe eseguendo il ciclo di ogni riga. Le seguenti tecniche potrebbero funzionare impostando una costanten_rows
per leggere in memoria e aggiornarei
indicizza ogni ciclismo:
LIMIT i,i+n_rows
BETWEEN i AND i+n_rows
WHILE primaryKey >= i AND primaryKey < i+n_rows
- Utilizzo di partizioni . Usa
partitionColumn
,lowerBound
,upperBound
enumPartitions
(Riferimento 1) e (Riferimento 2) :
partitionColumn
seleziona la colonna che verrà utilizzata per determinare come dividere i dati (ad esempio, la chiave primaria ).
lowerBound
stabilisce il valore minimo di partitionColumn
che verrà recuperato.
upperBound
stabilisce il valore massimo di partitionColumn
che verrà recuperato.
numPartitions
indica quante connessioni parallele vuoi impostare per leggere i dati tramite RDBMS.
Quindi Spark recupererà i tuoi set di dati utilizzando le righe che otterresti se stessi facendo SELECT * FROM table WHERE partitionColumn BETWEEN lowerBound AND upperBound
.