导出 Apache Spark ML 模型和管道
本文讨论 Databricks ML 模型导出工作流的导出部分;有关工作流的导入和评分部分,请参阅将模型导入应用程序。
使用 Databricks ML 模型导出可轻松导出训练后的 Apache Spark ML 模型和管道。
import com.databricks.ml.local.ModelExport
val lr = new LogisticRegression()
val model = lr.fit(trainingData)
// Export the model into provided directory
ModelExport.exportModel(lrModel, "<storage-location>")
有关详细的代码示例,请参阅示例笔记本。
模型导出格式
MLlib 模型以 JSON 文件形式导出,且格式与 Spark ML 暂留格式匹配。 MLlib 格式的主要变化如下:
- 使用 JSON 代替 Parquet
- 添加其他元数据
模型导出格式具有多个优点:
JSON
简单易读的格式,可签入版本控制系统
匹配的 MLlib 格式
模型导出与 MLlib 标准和 API 同步
计分
Azure Databricks 中的其他元数据允许在 Spark 之外进行评分
例如,导出逻辑回归模型将生成包含以下 JSON 文件的目录:
metadata
,其中包含模型的类型及其训练配置。 该文件与 MLlib 的metadata
文件匹配。{ "class":"org.apache.spark.ml.classification.LogisticRegressionModel", "paramMap":{ "featuresCol":"features", "predictionCol":"prediction", "aggregationDepth":2, "elasticNetParam":0.0, "family":"auto", "fitIntercept":true, "maxIter":100, "regParam":0.0, "standardization":true, "threshold":0.5, "tol":1.0E-6 }, "sparkVersion":"2.1.0", "timestamp":1488858051051, "uid":"logreg_a99aee74cfef"}
data
,其中包含训练后的模型参数。 该文件与 MLlib 的data
文件匹配。type
是 MLlib 向量格式:0
表示稀疏向量,1
表示密集向量。{ "numClasses":2, "numFeatures":13, "interceptVector": { "type":1, "values":[ -8.44645260967139 ] }, "coefficientMatrix":{ "type":1, "numRows":1, "numCols":4, "values":[ -0.01747691176982096, 1.542111173068903, 0.700895509427004, 0.025215711086829903 ], "isTransposed":true }, "isMultinomial":false}
dbmlMetadata
,其中包含特定于 Databricks ML 模型导出的其他信息。
{
"dbmlExportLibraryVersion":"0.1.1"
}
支持的模型
可以通过调用 ModelExport.supportedModels
以编程方式检索一系列支持的模型。 支持以下模型:
- 管道 - 可以导出完整的 ML 管道(包含支持的转换器和模型)。 这些管道必须是拟合后的(训练后的)
PipelineModels
,其中包含 Spark MLTransformers
和Models
,不包含任何Estimators
。 - 模型
注意
概率分类器(决策树分类器、逻辑回归、随机林分类器等)可以输出包含类概率向量的附加 probability
字段。
- 转换器
- Bucketizer
- HashingTF
- OneHotEncoder - 无法单独导出。 必须将其作为包含
Bucketizer
或StringIndexer
的管道的一部分导出。 - StringIndexer
- 分词器
- VectorAssembler
- VectorSlicer
从 Databricks 导出模型
以下笔记本演示如何从 Azure Databricks 导出 ML 模型。