Apache Spark-jobbet misslyckas med undantaget maxResultSize

Problem

Ett Spark-jobb Miss lyckas med ett maxResultSize undantag:

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)

Orsak

Felet beror på att den konfigurerade storleks gränsen överskreds. Storleks gränsen gäller för de totala serialiserade resultaten för Spark-åtgärder på alla partitioner. Spark-åtgärderna omfattar åtgärder som collect() till exempel noden driv rutin, toPandas() eller spara en stor fil till driv Rutinens lokala fil system.

Lösning

I vissa situationer kan du behöva återanvända koden för att förhindra att driv rutins-noden samlar in en stor mängd data. Du kan ändra koden så att driv rutins noden samlar in en begränsad mängd data eller ökar minnes storleken för driv rutins instansen. Du kan t. ex toPandas . anropa med pil aktive rad eller skriva filer och sedan läsa dessa filer i stället för att samla in stora mängder data tillbaka till driv rutinen.

Om det är absolut nödvändigt kan du ställa in egenskapen spark.driver.maxResultSize på ett värde som <X>g är högre än det värde som rapporteras i undantags meddelandet i kluster Spark-konfigurationen:

spark.driver.maxResultSize <X>g

Standardvärdet är 4G. Mer information finns i program egenskaper

Om du ställer in ett högt gräns värde kan det finnas slut på minnes fel i driv rutinen (beroende på spark.driver.memory och minnes omkostnader för objekt i JVM). Ange en lämplig gräns för att förhindra minnes fel.