Получение OutOfMemoryError G C превышен предел накладных расходов при сборе набора данных в Java Spark - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть некоторые данные приблизительного размера 250 МБ.

Я хочу загрузить данные и преобразовать их в карту

class MyData implements Serializable {

    private Map<String, List<SomeObject>> myMap;

    MyData(SparkSession sparkSession, String inputPath) {

        Dataset<Klass> ds = sparkSession.read().json(inputPath).as(Encoders.bean(Klass.class));
        myMap = ds.collectAsList().stream().collect(Collectors.toMap(
                                    Klass::getField1(),
                                    Klass::getField2()
                            )
                    );
    }
}

Это моя конфигурация искрового исполнения

--master yarn --deploy-mode cluster --executor-cores 2 --num-executors 200 --executor-memory 10240M

Разве не рекомендуется конвертировать набор данных в список / карту? Или это проблема конфигурации? Или проблема с кодом?

1 Ответ

1 голос
/ 30 апреля 2020

Похоже, что вы собираете все данные из набора данных в драйвер Spark с помощью:

myMap = ds.collectAsList()...

Поэтому вы должны установить память драйвера с помощью --driver-memory 2G в командной строке (иначе ваше "искровое выполнение" configuration ".

Значением по умолчанию для этого параметра является 1G, которого, вероятно, недостаточно для 250M необработанных данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...