Spark.mllib支持模型导出到Predictive Model Markup Language(预测模型标记语言)。
下表列出了可以导出到PMML的spark.mllib模型及其等效的PMML模型。
Spark.mllib模型 | PMML模型 |
---|---|
KMeansModel | ClusteringModel |
LinearRegressionModel | RegressionModel (functionName="regression") |
RidgeRegressionModel | RegressionModel (functionName="regression") |
LassoModel | RegressionModel (functionName="regression") |
SVMModel | RegressionModel (functionName="classification" normalizationMethod="none") |
Binary LogisticRegressionModel | RegressionModel (functionName="classification" normalizationMethod="logit") |
将支持的模型(见上表)导出到PMML,只需调用model.toPMML。
除了将PMML模型导出为String(model.toPMML,如上例所示),您也可以将PMML模型导出为其他格式。
这里是一个建立KMeansModel并以PMML格式打印出来的完整示例:
import org.apache.spark.mllib.clustering.KMeans import org.apache.spark.mllib.linalg.Vectors // 加载并解析数据 val data = sc.textFile("data/mllib/kmeans_data.txt") val parsedData = data.map(s =>Vectors.dense(s.split(' ').map(_.toDouble))).cache() // 使用KMeans将数据分成两类 val numClusters = 2 val numIterations = 20 val clusters =KMeans.train(parsedData, numClusters, numIterations) // 以PMML格式导出一个字符串 println("PMML Model:\n" + clusters.toPMML) // 将模型导出为PMML格式的本地文件 clusters.toPMML("/tmp/kmeans.xml") // 以PMML格式将模型导出到分布式文件系统的目录上 clusters.toPMML(sc, "/tmp/kmeans") // 将模型导出为PMML格式的输出流 clusters.toPMML(System.out)
有关API的详细信息,请参阅KMeans Scala文档和Vectors Scala文档
在Spark repo中的“examples/src/main/scala/org/apache/spark/examples/mllib/PMMLModelExportExample.scala”中查找完整示例代码。
对于不支持的模型,您将找不到.toPMML方法,否则将抛出IllegalArgumentException异常。