2017-02-14 36 views
3

我们试图找到加载Spark(2.x)ML训练模型的方法,以便根据请求(通过REST接口)我们可以查询它并获得预测结果,例如, http://predictor.com:8080/give/me/predictions?a=1,b=2,c=3Spark - Spark JobServer的基于请求的实时推荐?

有一些开箱即可将模型加载到Spark中(因为它存储在使用MLWritable进行训练之后的某处),然后将其用于预测,但似乎矫枉过正将它包装在作业中并运行每次请求/调用由于SparkContext的初始化。

但是,使用Spark的优点是我们可以保存我们的Pipeline模型并执行相同的特性转换,而无需在SparkContext之外实现它。

经过一番挖掘,我们发现spark-job-server可以通过允许我们为作业服务器初始化一个“热”的spark-context来帮助我们解决这个问题,因此,我们可以通过调用预测使用spark-job-server的REST API在现有的上下文中执行作业(并获取结果)。

这是API的最佳方法吗?如果是预测?由于特征空间的原因,我们无法预先预测所有组合。

或者我们考虑使用Spark Streaming并将预测持久化到消息队列中。这使我们不能使用spark-job-server,但它不会简化整体流程。有没有人试过类似的方法?

+0

我们最近尝试使用jobserver来解决类似的按需执行Spark作业的问题。虽然它很好,但它远不是一个准备发运产品的生产级别。您必须手动进行很多调整,对Spark 2.x的支持处于预览状态,并且需要进行部署。如果您准备投入大量工作,请继续。我们结束了基于Sparks未公开的REST API的解决方案。 –

+0

它会在适当的时间内响应吗(小于0.1秒)?根据我的经验,由于计算中的各个步骤,例如转换模式,类型检查,以及最重要的某种模型/矩阵广播,至少在NaiveBayes,W2V和我已经使用的其他一些模型/矩阵广播上,ML流水线确实很慢。 (当你有大量的预测时,成本是摊销的,但是它们的设置在单个预测案例中是令人望而生畏的)。无论如何,我没有看到火花ML管子在接近亚秒的地方表演。你有没有取得成功? – GPI

回答