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
SELECTquelles colonnes afficher explicitement, uniquement celles dont vous avez besoin, si possible ; - (Requête brute) Boucle dans un
whilecycle jusqu'à ce que vous puissiezfetchrangées en bouclant chaque rangée. Les techniques suivantes pourraient fonctionner en définissant une constanten_rowslire en mémoire et mettre à jouriindexer chaque cycle :
LIMIT i,i+n_rows
BETWEEN i AND i+n_rows
WHILE primaryKey >= i AND primaryKey < i+n_rows
- Utiliser des partitions . Utilisez
partitionColumn,lowerBound,upperBoundetnumPartitions(Référence 1) et (Référence 2) :
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 .