Я выполнял рабочий процесс на некоторых 3 миллионах записей по 15 столбцов на всех строках на моем 4-ядерном 16-гигабайтном компьютере, используя pyspark 1.5 в локальном режиме. Я заметил, что если я снова запустил тот же рабочий процесс, не перезапустив искру, память закончится, и я получаю Out of Memory Exceptions.
Поскольку все мои тайники суммируются примерно до 1 ГБ, я думал, что проблема кроется в сборке мусора. Мне удалось запустить сборщик мусора python вручную, вызвав:
import gc
collected = gc.collect()
print "Garbage collector: collected %d objects." % collected
Это немного помогло.
Я играл с настройками искрового GC в соответствии с этой статьей, и попытался сжать RDD и сменить сериализатор на Kyro, Это замедлило обработку и мало помогло с памятью.
Поскольку я точно знаю, когда у меня есть запасные циклы процессора для вызова GC, это может помочь моей ситуации узнать, как называть это вручную в JVM.