Zadanie Apache Spark kończy się niepowodzeniem z wyjątkiem maxResultSize

Problem

Zadanie platformy Spark kończy się niepowodzeniem z maxResultSize wyjątkiem:

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)

Przyczyna

Ten błąd występuje, ponieważ przekroczono skonfigurowany limit rozmiaru. Limit rozmiaru dotyczy łącznej liczby serializowanych wyników dla akcji platformy Spark we wszystkich partycjach. Akcje platformy Spark obejmują akcje, takie jak w węźle sterownika lub zapisanie collect() dużego pliku w lokalnym systemie plików toPandas() sterownika.

Rozwiązanie

W niektórych sytuacjach może być konieczne refaktoryzacja kodu, aby zapobiec zbieraniu dużej ilości danych przez węzeł sterownika. Kod można zmienić tak, aby węzeł sterownika zbierał ograniczoną ilość danych lub zwiększał rozmiar pamięci wystąpienia sterownika. Na przykład możesz wywołać wywołanie z włączoną strzałką lub napisać pliki, a następnie odczytać te pliki zamiast zbierać duże ilości danych toPandas z powrotem do sterownika.

W razie absolutnej konieczności można ustawić właściwość na wartość wyższą niż wartość zgłoszona w komunikacie o wyjątku spark.driver.maxResultSize w konfiguracji platformy Spark <X>gspark.driver.maxResultSize

spark.driver.maxResultSize <X>g

Wartość domyślna to 4g. Aby uzyskać szczegółowe informacje, zobacz Właściwości aplikacji

Jeśli ustawisz wysoki limit, w sterowniku mogą wystąpić błędy braku pamięci (w zależności od obciążenia pamięci obiektów w spark.driver.memory JVM). Ustaw odpowiedni limit, aby zapobiec błędom braku pamięci.