Mysql
 sql >> Base de données >  >> RDS >> Mysql

java.lang.OutofMemorySpace:Espace de tas Java lors de la récupération de 120 millions de lignes de la base de données dans pyspark

Vous essayez de charger dans la RAM trop de données . Vous devez d'abord réduire la quantité de données que SQL vous récupère avant qu'elles n'atteignent Spark et optimisez-le à l'aide de paramètres spark, par exemple partitions .

Envisagez une ou plusieurs de ces optimisations :

  • Spécifier dans SELECT quelles colonnes afficher explicitement, uniquement celles dont vous avez besoin, si possible ;
  • (Requête brute) Boucle dans un while cycle jusqu'à ce que vous puissiez fetch rangées en bouclant chaque rangée. Les techniques suivantes pourraient fonctionner en définissant une constante n_rows lire en mémoire et mettre à jour i indexer chaque cycle :

LIMIT i,i+n_rows

BETWEEN i AND i+n_rows

WHILE primaryKey >= i AND primaryKey < i+n_rows

partitionColumn sélectionnez la colonne qui sera utilisée pour déterminer comment diviser les données (par exemple, la clé primaire ).

lowerBound établit la valeur minimale de partitionColumn qui sera récupéré.

upperBound établit la valeur maximale de partitionColumn qui sera récupéré.

numPartitions signifie le nombre de connexions parallèles que vous souhaitez définir pour lire les données via RDBMS.

Ainsi, Spark récupérera vos ensembles de données en utilisant les lignes que vous obtiendriez si vous faisiez SELECT * FROM table WHERE partitionColumn BETWEEN lowerBound AND upperBound .