如何在 PySpark 中覆盖 Spark ML 模型?

How to overwrite Spark ML model in PySpark?

from pyspark.ml.regression import RandomForestRegressionModel

rf = RandomForestRegressor(labelCol="label",featuresCol="features", numTrees=5, maxDepth=10, seed=42)
rf_model = rf.fit(train_df)
rf_model_path = "./hdfsData/" + "rfr_model"
rf_model.save(rf_model_path)

当我第一次尝试保存模型时,这些行有效。但是当我想再次将模型保存到路径中时,它给出了这个错误:

Py4JJavaError: An error occurred while calling o1695.save. : java.io.IOException: Path ./hdfsData/rfr_model already exists. Please use write.overwrite().save(path) to overwrite it.

然后我尝试了:

rf_model.write.overwrite().save(rf_model_path)

它给出了:

AttributeError: 'function' object has no attribute 'overwrite'

好像pyspark.mllib模块有覆盖功能,pyspark.ml模块没有。如果我想用新模型覆盖旧模型,有人知道如何解决这个问题吗?谢谢。

您看到的消息是 Java 错误消息,而不是 Python 错误消息。你应该先调用write方法:

rf_model.write().overwrite().save(rf_model_path)

显然在 Scala 中可以使用

rf_model.write.overwrite.save(rf_model_path)

您必须删除在第一次 运行 期间创建的文件夹,然后重新运行 您的代码。