我有一个PySpark作业,该作业处理输入数据并训练逻辑回归模型。我需要以某种方式将此经过训练的模型转换为用Java Spark编写的生产代码。从Java代码加载此训练后的模型后,它将传递功能以从模型获得预测。
从PySpark方面,我正在使用数据框API(spark.ml),而不是mllib。
是否可以将经过训练(拟合)的模型保存到文件中,然后从Java Spark代码中读取回去?如果有更好的方法,请告诉我。
答案 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。无论如何,逻辑回归是一个简单的模型,因此您只需将其权重保存为数组并在代码中重新创建即可。