Échec d’un travail Apache Spark avec l’exception maxResultSize

Problème

Un travail Spark échoue avec une maxResultSize exception :

org.apache.spark.SparkException: Job aborted due to stage failure: Total size of serialized
results of XXXX tasks (X.0 GB) is bigger than spark.driver.maxResultSize (X.0 GB)

Cause

Cette erreur se produit parce que la limite de taille configurée a été dépassée. La limite de taille s’applique au total des résultats sérialisés pour les actions Spark sur toutes les partitions. Les actions Spark incluent des actions telles que collect() le nœud du pilote, toPandas() ou l’enregistrement d’un fichier volumineux dans le système de fichiers local du pilote.

Solution

Dans certains cas, vous devrez peut-être Refactoriser le code pour empêcher le nœud de pilote de collecter une grande quantité de données. Vous pouvez modifier le code afin que le nœud du pilote collecte une quantité limitée de données ou augmente la taille de la mémoire de l’instance du pilote. Par exemple, vous pouvez appeler toPandas avec la flèche activée ou écrire des fichiers, puis lire ces fichiers au lieu de récupérer de grandes quantités de données sur le pilote.

Si cela est absolument nécessaire, vous pouvez affecter à la propriété spark.driver.maxResultSize une valeur <X>g supérieure à la valeur signalée dans le message d’exception dans la configuration du cluster spark.driver.maxResultSize:

spark.driver.maxResultSize <X>g

La valeur par défaut est 4G. Pour plus d’informations, consultez Propriétés de l' application

Si vous définissez une limite élevée, des erreurs de mémoire insuffisante peuvent se produire dans le pilote (en fonction de spark.driver.memory la surcharge de mémoire des objets dans la JVM). Définissez une limite appropriée pour éviter les erreurs de mémoire insuffisante.