PySpark: Can't pickle CountVectorizerModel - TypeError: Cannot serialize socket object (but why is the socket library being used?)

PySpark: Can't pickle CountVectorizerModel - TypeError: Cannot serialize socket object (but why is the socket library being used?)

我注意到,与 Sci-kit learn 不同,CountVectorizer 的 PySpark 实现使用套接字库,因此我无法对其进行 pickle。

是否有任何解决方法或其他方法来持久化矢量化器?我需要矢量化模型,因为我接收输入文本数据,我想将其转换为与测试数据中使用的相同类型的词向量。

我尝试查看 CountVectorizer 源代码,但没有看到套接字库的任何明显用途。

任何想法都非常感谢,谢谢!

这是我尝试腌制模型的方法:

with open("vectorized_model.pkl", "wb") as output_file:
  pickle.dump(vectorized_model, output_file) 

导致:类型错误:无法序列化套接字对象

这是模型的原始创建:

from pyspark.ml.feature import CountVectorizer
import dill as pickle

vectorizer = CountVectorizer()
vectorizer.setInputCol("TokenizedText")
vectorizer.setOutputCol("Tfidf")
vectorized_model = vectorizer.fit(training_data)
vectorized_model.setInputCol("TokenizedText")

所以我意识到,我可以使用 vectorized_model.save()CountVectorizerModel.load() 来保存和检索模型,而不是酸洗。