使用单个数据记录可伸缩地调用SparkMLlib1.6预测模型

vjrehmav  于 2021-06-07  发布在  Kafka
关注(0)|答案(1)|浏览(343)

我在spark1.6中建立了一个预测模型(logistic回归),该模型已保存到磁盘中,以便以后与新的数据记录一起重用。我想用多个客户端调用它,每个客户端传入一条数据记录。似乎使用spark作业来运行单个记录会有太多的开销,而且伸缩性不强(每个调用只传递一组18个值)。加载保存的模型的mllibapi需要spark上下文,尽管如此,我正在寻找如何以可伸缩的方式实现这一点的建议。我想到了带有Kafka输入的spark流(每个客户机请求都会写入一个Kafka主题)。对这个想法有什么想法或其他建议吗?

anauzrmj

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管道模型)以了解详细信息。
对于分布式模型,确实没有很好的解决方法。您必须以这样或那样的方式在分布式数据集上开始一个完整的作业。

相关问题