我们正在尝试找到一种方法来加载 Spark (2.x) ML 训练模型,以便根据请求(通过 REST 接口)我们可以查询它并获取预测,例如http://predictor.com:8080/give /我/预测?a = 1,b = 2,c = 3
有一些开箱即用的库可以将模型加载到 Spark 中(假设它在使用 MLWritable 训练后存储在某个地方),然后将其用于预测,但将其包装在作业中并根据每个请求/调用运行它似乎有些过分SparkContext的初始化。
然而,使用 Spark 的优点是我们可以保存 Pipeline 模型并执行相同的特征转换,而无需在 SparkContext 之外实现它。
经过一番挖掘,我们发现Spark-job-server可以通过允许我们为作业服务器初始化“热”spark-context 来帮助我们解决这个问题,因此,我们可以通过调用预测来服务请求使用 Spark-job-server 的 REST API 在现有上下文中执行作业(并获取结果)。
这是 API 化预测的最佳方法吗?由于特征空间的原因,我们无法预先预测所有组合。
或者,我们考虑使用 Spark Streaming 并将预测保存到消息队列中。这允许我们不使用spark-job-server,但它并没有简化整体流程。有人尝试过类似的方法吗?