如何释放pyspark模型(JavaModel)占用的内存?

如上所述,我通过pyspark加载了经过训练的word2vec模型。

word2vec_model = Word2VecModel.load("saving path")

使用完之后,我想删除它,因为它将在单个节点上占用大量内存空间(我使用了findSynonyms函数,并且文档说应该只在本地使用) 我尝试使用

del word2vec_model
gc.collect()

但是似乎没什么意思。它不是rdd文件,我不能使用.unpersist()。我在文档中没有找到类似unload()的功能。

任何人都可以帮助我或给我一些建议吗?

redrex5 回答:如何释放pyspark模型(JavaModel)占用的内存?

通过运行以下语句,可以确保py4j网关取消了对象的引用:

word2vec_model一个pyspark Transformer

  • sparkSparkSession
spark.sparkContext._gateway.detach(word2vec_model._java_obj)
  • ...或给sc一个SparkContext
sc._gateway.detach(word2vec_model._java_obj)

说明:

  1. 访问底层包装对象:您的模型是pyspark Transformer,每个转换器在私有JavaObject属性中拥有_java_obj的实例。
  2. 访问SparkContext的py4j网关
  3. 在包装对象上使用网关的detach方法(实例为JavaObject
本文链接:https://www.f2er.com/3140470.html

大家都在问