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

问题描述 投票:0回答:1

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

word2vec_model = Word2VecModel.load("saving path")

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

del word2vec_model
gc.collect()

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

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

python apache-spark pyspark nlp word2vec
1个回答
1
投票

您可以通过运行以下语句来确保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的实例)
© www.soinside.com 2019 - 2024. All rights reserved.