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
SELECTquali colonne visualizzare in modo esplicito, solo quelle necessarie, se possibile; - (Query non elaborata) Ciclo in un
whileciclo finché non riesci afetchrighe eseguendo il ciclo di ogni riga. Le seguenti tecniche potrebbero funzionare impostando una costanten_rowsper leggere in memoria e aggiornareiindicizza 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,upperBoundenumPartitions(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 .