Error en el trabajo de Apache Spark con la excepción maxResultSize

Problema

Se produce un Error en un trabajo de Spark con la excepción maxResultSize:

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)

Causa

Este error se produce porque se superó el límite de tamaño configurado. El límite de tamaño se aplica al total de resultados serializados para las acciones de Spark en todas las particiones. Las acciones de Spark incluyen acciones como collect() en el nodo del controlador, toPandas() o guardar un archivo grande en el sistema de archivos local del controlador.

Solución

En algunas situaciones, es posible que tenga que refactorizar el código para impedir que el nodo del controlador recopile una gran cantidad de datos. Puede cambiar el código para que el nodo del controlador recopile una cantidad limitada de datos, o bien aumentar el tamaño de memoria de la instancia del controlador. Por ejemplo, puede llamar a toPandas con Arrow habilitado o escribir archivos y, luego, leerlos, en lugar de recopilar grandes cantidades de datos en el controlador.

Si es absolutamente necesario, puede establecer la propiedad spark.driver.maxResultSize en un valor <X>g superior al que se notifica en el mensaje de excepción en la configuración de Spark del clúster:

spark.driver.maxResultSize <X>g

El valor predeterminado es "4g". Para obtener más información, consulte Propiedades de la aplicación.

Si establece un límite alto, pueden producirse errores de memoria insuficiente en el controlador (en función de spark.driver.memory y de la sobrecarga de memoria de los objetos de JVM). Establezca un límite adecuado para evitar los errores de memoria insuficiente.