java - 从pyspark手动调用spark的垃圾回收

标签 java python apache-spark garbage-collection pyspark

我一直在本地模式下使用 pyspark 1.5 在我的 4 核 16GB 机器上对大约 300 万条记录 x 15 列所有字符串运行工作流。 我注意到,如果我在没有先重新启动 spark 的情况下再次运行相同的工作流程,内存就会耗尽并且我会收到内存不足异常。

由于我所有的缓存加起来大约为 1 GB,我认为问题出在垃圾回收上。我能够通过调用手动运行 python 垃圾收集器:

import gc
collected = gc.collect()
print "Garbage collector: collected %d objects." % collected

这有点帮助。

我已经根据这个 article 玩过 spark 的 GC 设置,并尝试压缩 RDD 并将序列化器更改为 Kyro。这减慢了处理速度并且对内存没有太大帮助。

因为我确切地知道何时有空闲 cpu 周期来调用 GC,所以了解如何在 JVM 中手动调用它可能对我的情况有所帮助。

最佳答案

我相信这会在 JVM 中触发 GC(提示):

spark.sparkContext._jvm.System.gc()

另请参阅:How to force garbage collection in Java?

和:Java: How do you really force a GC using JVMTI's ForceGargabeCollection?

关于java - 从pyspark手动调用spark的垃圾回收,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33689536/

相关文章:

java - 线程局部初始化

java - java中如何设置多维数组的初值

python - 赋值问题,一个 NumPy 函数?

mysql - Apache Spark : Is it good to use structured data

apache-spark - spark(2.3或新版本)如何确定读取gsbucket或hdfs中hive表文件的任务数?

java - 在 Main[JAVA] 中用另一种类型的对象替换对象

javax.persistence.EntityNotFoundException : Unable to find object with id X

python - 是否可以运行列表中的命令?

python - Tweepy Streaming - 停止收集 x 数量的推文

csv - Spark 2.1 无法在 CSV 上写入 Vector 字段