从 pyspark 手动调用 spark 的垃圾回收
2022-09-03 16:02:46
我一直在本地模式下使用pyspark 1.5在我的4核16GB计算机上对大约300万条记录x 15列所有字符串运行工作流。我注意到,如果我在没有首先重新启动 spark 的情况下再次运行相同的工作流,内存就会耗尽,并且会出现内存不足异常。
由于我的所有缓存总计约为1 GB,因此我认为问题在于垃圾回收。我能够通过调用来手动运行python垃圾回收器:
import gc
collected = gc.collect()
print "Garbage collector: collected %d objects." % collected
这有一点帮助。
根据本文,我已经使用了spark的GC的设置,并尝试压缩RDD并将序列化程序更改为Kyro。这减慢了处理速度,对内存没有多大帮助。
由于我确切地知道何时有空闲的CPU周期来调用GC,因此知道如何在JVM中手动调用它可以帮助我的情况。