我正在按照PMML model export - spark.mllib的说明创建K均值模型。
val numClusters = 10
val numIterations = 10
val clusters = KMeans.train(data, numClusters, numIterations)
// Save and load model: export to PMML
println("PMML Model:\n" + clusters.toPMML("/kmeans.xml"))但是在那之后我不知道如何加载PMML。
我在努力
val sameModel = KMeansModel.load(sc, "/kmeans.xml")并显示为:
org.apache.hadoop.mapred.InvalidInputException: Input path does not exist: file:/kmeans.xml/metadata有什么想法吗?
诚挚的问候
发布于 2017-05-30 21:13:44
正如文档中所述(对于您感兴趣的版本- 1.6.1和最新版本- 2.1.0),Spark仅支持导出到PMML。load方法实际上期望检索以Spark own格式保存的模型,这就是为什么load方法期望某个路径存在,以及抛出异常的原因。
如果您使用Spark对模型进行了训练,则可以稍后对其进行save和load。
如果您需要加载未在Spark中训练的模型,并且已另存为PMML,则可以使用jpmml-spark加载和评估它。
发布于 2017-05-31 15:08:55
我在这个Spark.mllib的KMeans空间的有限经验是,这是不可能的,但你可以自己开发这个特性。
Spark.mllib的KMeansModel is PMMLExportable
class KMeansModel @Since("1.1.0") (@Since("1.0.0") val clusterCenters: Array[Vector])
extends Saveable with Serializable with PMMLExportable {这就是为什么可以使用toPMML将模型保存为PMML XML格式的原因。
(同样,我对Spark MLlib有很少的经验)我的理解是,KMeans都是关于质心的,这就是当你执行KMeansModel.load时加载的东西,它使用读取质心并创建KMeansModel的KMeansModel.SaveLoadV1_0.load
new KMeansModel(localCentroids.sortBy(_.id).map(_.point))对于KMeansModel.toPMML,Spark MLlib使用pmml- PMML的模型(如here所示):
new PMML("4.2", header, null)我推荐探索pmml- PMML的模型如何进行保存和加载,因为这超出了Spark的范围。
旁注
为什么你要在训练模型之后使用Spark来拥有它呢?这确实是可能的,但您可能是在浪费集群资源让Spark托管该模型。
在我有限的理解中,Spark MLlib的唯一目的是使用Spark的特性,如分布式和并行性来处理大数据集来构建模型,并在以后使用它们而不使用Spark机器。
在我狭隘的视野里,我一定错过了一些重要的东西。
发布于 2019-08-22 09:29:25
您可以使用PMML4S-Spark加载PMML模型以在Spark中对其进行评估,例如:
import org.pmml4s.spark.ScoreModel
val model = ScoreModel.fromFile("/kmeans.xml")model是一个SparkML转换器,因此您可以根据数据帧进行预测:
val scoreDf = model.transform(df)https://stackoverflow.com/questions/37838480
复制相似问题