我在spark1.6中建立了一个预测模型(logistic回归),该模型已保存到磁盘中,以便以后与新的数据记录一起重用。我想用多个客户端调用它,每个客户端传入一条数据记录。似乎使用spark作业来运行单个记录会有太多的开销,而且伸缩性不强(每个调用只传递一组18个值)。加载保存的模型的mllibapi需要spark上下文,尽管如此,我正在寻找如何以可伸缩的方式实现这一点的建议。我想到了带有Kafka输入的spark流(每个客户机请求都会写入一个Kafka主题)。对这个想法有什么想法或其他建议吗?
1条答案
按热度按时间anauzrmj1#
非分布式(实际上是大多数)模型来自
o.a.s.mllib
不需要主动SparkContext
对于单项预测。如果你查看api文档,你就会看到LogisticRegressionModel
提供predict
带签名的方法Vector => Double
. 这意味着您可以使用标准java工具序列化模型,稍后阅读并在本地执行预测o.a.s.mllib.Vector
对象。spark还提供有限的pmml支持(不适用于logistic回归),因此您可以与支持此格式的任何其他库共享您的模型。
最后,非分布式模型通常不那么复杂。对于线性模型,你所需要的只是截距、系数和一些基本的数学函数以及线性代数库(如果你想要一个好的性能的话)。
o.a.s.ml
模型稍难处理,但有一些外部工具试图解决这个问题。您可以查看开发人员列表上的相关讨论(部署ml管道模型)以了解详细信息。对于分布式模型,确实没有很好的解决方法。您必须以这样或那样的方式在分布式数据集上开始一个完整的作业。