У меня есть типичное пакетное задание, которое читает CSV из облачного хранилища, затем выполняет объединение и агрегирование, весь файл не превышает 3G. Но я получаю исключение OOM при записи результата обратно в хранилище, у меня есть два исполнителя, каждый имеет 80 ГБ ОЗУ, это просто не имеет смысла, вот снимок экрана моего искрового интерфейса и исключения. И предложение приветствуется, если мой код является сверхоптимальным с точки зрения памяти, почему он не отображается в пользовательском интерфейсе spark?
![enter image description here](https://i.stack.imgur.com/YwSJ6.png)
![enter image description here](https://i.stack.imgur.com/MXifI.png)
обновление: исходный код слишком сложен, чтобы показать его здесь, но я выяснил, что основной причиной является множественное соединение.
Dataset<Row> ret = something dataframe
for (String cmd : cmds) {
ret = ret.join(processDataset(ret, cmd), "primary_key")
}
итак, каждый processDataset (ret, cmd), если вы запускаете его сам по себе, он очень быстрый, но если у вас есть такое объединение циклов for много раз, скажем, 10 или 20 раз, он получает много намного медленнее, и у вас возникают проблемы с OOM.