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

How to free the memory taken by a pyspark model (JavaModel)?

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

word2vec_model = Word2VecModel.load("saving path")

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

del word2vec_model
gc.collect()

不过好像没话说。而且它不是 rdd 文件,我不能使用 .unpersist()。我在文档中没有找到类似 unload() 的函数。

有谁可以帮助我或给我一些建议吗?

您可以通过 运行 以下语句确保对象被 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,每个转换器在私有 _java_obj 中持有一个 JavaObject 的实例属性。
  2. 访问 SparkContext 的 py4j 网关
  3. 在包装器对象(JavaObject 的实例)上使用网关的 detach 方法