Spark ml:是否可以将经过训练的模型保存在PySpark中并从Java Spark代码中读取?

时间:2019-03-09 19:42:09

标签: apache-spark pyspark apache-spark-sql

我有一个PySpark作业,该作业处理输入数据并训练逻辑回归模型。我需要以某种方式将此经过训练的模型转换为用Java Spark编写的生产代码。从Java代码加载此训练后的模型后,它将传递功能以从模型获得预测。

从PySpark方面,我正在使用数据框API(spark.ml),而不是mllib。

是否可以将经过训练(拟合)的模型保存到文件中,然后从Java Spark代码中读取回去?如果有更好的方法,请告诉我。

2 个答案:

答案 0 :(得分:1)

是的,有可能。除了SparkR例外,它需要额外的元数据来加载模型,所有本机ML模型(尽管有自定义来宾语言扩展)都可以保存并通过任意后端加载。

仅使用一侧的MLWritable方法或其编写器(save)保存write对象,并在另一侧以兼容的Readable进行加载。假设在Python中:

from pyspark.ml.feature import StringIndexer

StringIndexer(inputCol="foo", outputCol="bar").write().save("/tmp/indexer")

和Scala中

import org.apache.spark.ml.feature.StringIndexer

val indexer = StringIndexer.load("/tmp/indexer")
indexer.getInputCol
// String = foo

话虽这么说,机器学习模型通常是生产用途的错误选择,并且存在更合适的选择-How to serve a Spark MLlib model?

答案 1 :(得分:0)

欢迎来到SO。您是否尝试过这样做?通常,它必须可以正常工作-如果保存spark.ml模型,则可以从任何支持spark的语言中加载spark。无论如何,逻辑回归是一个简单的模型,因此您只需将其权重保存为数组并在代码中重新创建即可。