Mysql
 sql >> Database >  >> RDS >> Mysql

java.lang.OutofMemorySpace:spazio dell'heap Java durante il recupero di 120 milioni di righe dal database in pyspark

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 a fetch righe eseguendo il ciclo di ogni riga. Le seguenti tecniche potrebbero funzionare impostando una costante n_rows per leggere in memoria e aggiornare i indicizza ogni ciclismo:

LIMIT i,i+n_rows

BETWEEN i AND i+n_rows

WHILE primaryKey >= i AND primaryKey < i+n_rows

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 .