关于Apache Kafka:具有单个数据记录的Spark MLlib 1.6预测模型的可伸缩调用

Scalable invocation of Spark MLlib 1.6 predictive model w/a single data record

我有一个构建在Spark 1.6中的预测模型(逻辑回归),该模型已保存到磁盘中,以便以后与新数据记录一起使用。我想用多个客户端调用它,每个客户端传递单个数据记录。似乎使用Spark作业来运行单个记录会产生过多的开销,并且伸缩性非常差(每次调用只会传递一组18个值)。 MLlib API加载已保存的模型需要Spark上下文,因此正在寻找有关如何以可扩展方式执行此操作的建议。想到带有Kafka输入的Spark Streaming(每个客户端请求都将写入一个Kafka主题)。对这个想法或其他建议有什么想法?


o.a.s.mllib中的非分布式(实际上是多数)模型不需要针对单个项目预测的活动SparkContext。如果查看API文档,您会看到LogisticRegressionModel提供具有签??名Vector => Doublepredict方法。这意味着您可以使用标准Java工具序列化模型,稍后再读取它,并对本地o.a.s.mllib.Vector对象执行预测。

Spark还提供了有限的PMML支持(不适用于逻辑回归),因此您可以与支持此格式的任何其他库共享模型。

最后,非分布式模型通常并不那么复杂。对于线性模型,您需要的是截距,系数和一些基本的数学函数以及线性代数库(如果要获得良好的性能)。

o.a.s.ml模型很难处理,但是有一些外部工具试图解决这个问题。您可以在开发人员列表(部署ML管道模型)上查看相关讨论以获取详细信息。

对于分布式模型,实际上没有很好的解决方法。您必须以一种或另一种方式在分布式数据集上开始一项完整的工作。