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

时间:2017-02-17 17:12:31

标签: apache-spark machine-learning pyspark apache-spark-mllib apache-spark-ml

#r "Microsoft.WindowsAzure.Storage"

open Microsoft.Azure.WebJobs;
open Microsoft.WindowsAzure.Storage.Queue;

let Run(request: string, queue: CloudQueue) =
    async {
        () //TODO: read messages from the queue
    } |> Async.RunSynchronously

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

  

Py4JJavaError:调用o1695.save时发生错误。 :java.io.IOException:Path ./hdfsData/rfr_model已存在。请使用write.overwrite()。save(path)来覆盖它。

然后我尝试了:

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)

它给了:

  

AttributeError:'function'对象没有属性'overwrite'

似乎rf_model.write.overwrite().save(rf_model_path) 模块提供覆盖功能但不提供pyspark.mllib模块。如果我想用新模型覆盖旧模型,任何人都知道如何解决这个问题?感谢。

2 个答案:

答案 0 :(得分:10)

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

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

答案 1 :(得分:0)

显然在 Scala 中它适用

rf_model.write.overwrite.save(rf_model_path)