Как освободить память, занятую моделью pyspark (JavaModel)? - PullRequest
0 голосов
/ 08 ноября 2019

Как описано, я загружаю обученную модель word2vec через pyspark.

word2vec_model = Word2VecModel.load("saving path")

После этого я хочу удалить его, так как он займет много места в памяти на одном узле (я использовал функцию findSynonyms, а документ говорит, что она должна использоваться только локально), которую я пытался использовать

del word2vec_model
gc.collect()

но, похоже, это не слово. И это не случайный файл, я не могу использовать .unpersist (). Я не нашел в документации ничего подобного функции unload ().

Кто-нибудь может мне помочь или дать какой-нибудь совет?

1 Ответ

1 голос
/ 08 ноября 2019

Вы можете убедиться, что объект разыменован шлюзом py4j, выполнив следующую инструкцию:

Дано word2vec_model pyspark Transformer:

  • Дано sparka SparkSession:
spark.sparkContext._gateway.detach(word2vec_model._java_obj)
  • ... или задано sc a SparkContext:
sc._gateway.detach(word2vec_model._java_obj)

Пояснения:

  1. Доступ к базовому объекту-оболочке : ваша модель - pyspark Transformer, и каждый преобразователь содержит экземпляр JavaObject в закрытом атрибуте _java_obj.
  2. Доступ к SparkContext шлюзу py4j .
  3. Использование метода шлюза detach для объекта-оболочки (экземпляр JavaObject)
...