我正在评估基于生产ML的应用程序的工具,我们的一个选项是Spark MLlib,但是我对如何在训练后提供模型服务有一些疑问?
例如,在Azure ML中,一旦经过培训,该模型将作为Web服务公开,可以从任何应用程序中使用,这与Amazon ML类似.
您如何在Apache Spark中提供/部署ML模型?
我正在努力保存ML Pipeline生产的数千种型号.正如在答复中指出这里,该机型可以保存如下:
import java.io._
def saveModel(name: String, model: PipelineModel) = {
val oos = new ObjectOutputStream(new FileOutputStream(s"/some/path/$name"))
oos.writeObject(model)
oos.close
}
schools.zip(bySchoolArrayModels).foreach{
case (name, model) => saveModel(name, Model)
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试使用s3://some/path/$name,/user/hadoop/some/path/$name因为我希望模型最终保存到亚马逊s3,但它们都失败,并显示无法找到路径的消息.
如何将模型保存到Amazon S3?
遵循Spark MLlib指南, 我们可以读到Spark有两个机器学习库:
spark.mllib,建立在RDD之上.spark.ml,建立在Dataframes之上.根据 StackOverflow上的这个和这个问题,Dataframes比RDD更好(和更新),应尽可能使用.
问题是我想使用常见的机器学习算法(例如:Frequent Pattern Mining,Naive Bayes等)和spark.ml(对于数据帧)不提供此类方法,仅spark.mllib(对于RDD)提供此算法.
如果Dataframes比RDD更好并且推荐指南推荐使用spark.ml,为什么不能在该lib中实现常见的机器学习方法?
machine-learning apache-spark pyspark apache-spark-ml apache-spark-mllib
我在Apache Spark(使用pyspark)中训练了一个分类模型.我将模型存储在一个对象中LogisticRegressionModel.现在,我想对新数据做出预测.我想存储模型,并将其读回新程序以进行预测.知道如何存储模型吗?我想的可能是泡菜,但我是python和Spark的新手,所以我想听听社区的想法.
更新:我还需要一个决策树分类器.要阅读它,我需要导入DecisionTreeModelpyspark
有人可以举例说明如何在pySpark中保存ML模型吗?
对于
ml.classification.LogisticRegressionModel
Run Code Online (Sandbox Code Playgroud)
我尝试使用以下内容:
model.save("path")
Run Code Online (Sandbox Code Playgroud)
但它似乎不起作用。
我正在重构我的代码以利用DataFrames,Estimators和Pipelines.我本来用MLlib多类LogisticRegressionWithLBFGS上RDD[LabeledPoint].我很高兴学习和使用新的API,但我不知道如何保存我的新模型并将其应用于新数据.
目前,ML实现LogisticRegression仅支持二进制分类.我是,而不是像这样使用OneVsRest:
val lr = new LogisticRegression().setFitIntercept(true)
val ovr = new OneVsRest()
ovr.setClassifier(lr)
val ovrModel = ovr.fit(training)
Run Code Online (Sandbox Code Playgroud)
我现在想保存我的OneVsRestModel,但这似乎不受API的支持.我试过了:
ovrModel.save("my-ovr") // Cannot resolve symbol save
ovrModel.models.foreach(_.save("model-" + _.uid)) // Cannot resolve symbol save
Run Code Online (Sandbox Code Playgroud)
有没有办法保存这个,所以我可以将它加载到新的应用程序中进行新的预测?
我使用以下代码构建了一个随机森林模型:
import org.apache.spark.ml.classification.RandomForestClassificationModel
import org.apache.spark.ml.classification.RandomForestClassifier
val rf = new RandomForestClassifier().setLabelCol("indexedLabel").setFeaturesCol("features")
val labelConverter = new IndexToString().setInputCol("prediction").setOutputCol("predictedLabel").setLabels(labelIndexer.labels)
val training = labelIndexer.transform(df)
val model = rf.fit(training)
Run Code Online (Sandbox Code Playgroud)
现在我想保存模型,以便以后使用以下代码进行预测:
val predictions: DataFrame = model.transform(testData)
Run Code Online (Sandbox Code Playgroud)
我在这里查看了Spark文档,但没有找到任何选项.任何的想法?我花了几个小时来构建模型,如果Spark破碎我将无法恢复它.
我有一个 Spark Rdd,其形式为 Row(id,Words),其中单词包含单词列表。我想将此列表转换为单列。输入
ID Words
1 [w1,w2,w3]
2 [w3,w4]
Run Code Online (Sandbox Code Playgroud)
我想将其转换为输出格式
ID Word
1 w1
1 w2
1 w3
2 w3
2 w4
Run Code Online (Sandbox Code Playgroud) 我在 Spark ML 中编写了这段代码
import org.apache.spark.ml.classification.LogisticRegression
import org.apache.spark.ml.Pipeline
val lr = new LogisticRegression()
val pipeline = new Pipeline()
.setStages(Array(fooIndexer, fooHotEncoder, assembler, lr))
val model = pipeline.fit(training)
Run Code Online (Sandbox Code Playgroud)
这段代码需要很长时间才能运行。是否有可能在运行 pipeline.fit 后将模型保存在 HDFS 上,这样我就不必一次又一次地运行它?
编辑:另外,当我必须transform在模型上应用时如何从 HDFS 加载它以便我可以进行预测。