Когда вы применяете функцию python к разделу с mapPartitions
, Spark оценивает его в сопутствующем процессе python для каждого исполнителя на основе JVM.
Обычно память, используемая процессом python, мала ихорошо в пределах настройки YARN memoryOverhead, используемой в EMR.В вашем конкретном случае это предположение не выполняется, поскольку процесс python должен удерживать вашу большую модель в памяти, поэтому вам необходимо адаптировать свою конфигурацию.
Если вы используете 8 ЦП / 32 ГБ ОЗУ для каждого хоста исполнителя, выв качестве базовой конфигурации можно попробовать следующее:
spark.executor.cores=6
spark.executor.memory=8G
spark.executor.pyspark.memory=20G
Обратите внимание, что установка spark.executor.pyspark.memory
наложит жесткое ограничение на использование памяти вашим процессом python (по умолчанию оно не ограничено), поэтому вам, возможно, придется поэкспериментировать снайдите ограничение, которое будет соответствовать вашему процессу.
Альтернативная конфигурация - сохранить память процесса pyspark неограниченной, но зарезервировать достаточно YARN memoryOverhead для его размещения, например:
spark.executor.cores=6
spark.executor.memory=8G
spark.executor.memoryOverhead=22G