我有一些训练数据,用于构建 Hive 数据库中的 Spark MLLib 模型。我正在使用简单的线性回归模型和 PySpark API。
我设置了一个代码来每天训练这个模型以获得最新的模型。(实际用例是我正在预测车辆卸载时间,并且我的模型必须始终是最近训练的,因为车辆和位置的特征会随着时间而变化。)
但是,当我使用我的模型进行推理时,我想从现有的 Java 代码库中进行推理。我需要对单个数据点进行快速推理,而不是批量推理。所以我需要一种轻量级的低延迟计算推理的方法。
我发现的一种解决方案是将我的 MLLib 模型的参数导出为 PMML 或其他表示形式,然后在纯 Java 中重新实现推理代码,而无需使用 Spark 附带的任何样板。所以我有这样的功能:
public static double predict(double[] parameters) {
double prediction = bias + weights[0] * parameters[0] + ....;
return prediction;
}
其中数组权重每天都会使用从经过训练的 MLLib 模型导出的值进行更新。
然而,这似乎效率低下,因为模型设计的逻辑现在在 Java 代码中不必要地复制,并且也限制了我可以用这种方式表示的那种简单模型。例如,对于随机森林回归,我无法做到这一点。
理想情况下,我希望在 Java 中对 Spark MLLib 进行轻量级推理调用,而不需要任何 Spark 会话、服务器、API、URL 等的开销。
有没有我可以使用的轻量级 Spark Java 函数来推断单个实例?我不认为有人需要 Hive 和并行处理的好处来进行训练是一种不常见的情况,而只是以最小的开销进行快速简单的推理。