#apache-spark
Вопрос:
У нас есть алгоритм, который в настоящее время обрабатывает данные по разделам foreachPartition
. Я понимаю, что это, возможно, не лучший способ обработки данных в Spark, но, теоретически, мы должны быть в состоянии заставить его работать.
У нас возникла проблема с разливом данных Spark после sortWithinPartitions
вызова с примерно 45 GB
большим количеством данных в разделе. У нашего исполнителя есть 250 GB
определенная память. Теоретически, в памяти достаточно места для размещения данных (если только накладные расходы Spark на сортировку не велики). И все же мы испытываем разливы. Есть ли способ точно рассчитать, сколько памяти на одного исполнителя нам потребуется, чтобы заставить его работать?
Комментарии:
1. sortWithinPartitions не будет выполнять перетасовку, но какие операции вы выполняете после этого, что приводит к утечке ваших данных.. Есть ли перекос данных в наборе данных, который вы обрабатываете?
2. @NikunjKakadiya технически сейчас есть перекос, но в будущем его не будет (в настоящее время один раздел имеет 16 ГБ, другой 32 ГБ, размер остальных меньше 2 ГБ). после сортировки я просто делаю foreachPartition
3. Трудно предположить, не видя фактического кода и того, как он создает этапы и задачи в пользовательском интерфейсе spark. Но если у вашего исполнителя 250 ГБ памяти, то это вообще не должно быть проблемой, если только не происходит что-то странное.