【问题标题】:Scalable invocation of Spark MLlib 1.6 predictive model w/a single data record具有单个数据记录的 Spark MLlib 1.6 预测模型的可扩展调用
【发布时间】:2017-01-15 04:38:00
【问题描述】:

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

【问题讨论】:

    标签: apache-spark apache-kafka spark-streaming apache-spark-mllib


    【解决方案1】:

    来自o.a.s.mllib 的非分布式(实际上是多数)模型不需要活动的SparkContext 来进行单项​​预测。如果您检查API docs,您会看到LogisticRegressionModel 提供了predict 方法和签名Vector => Double。这意味着您可以使用标准 Java 工具对模型进行序列化,稍后再阅读它并对本地 o.a.s.mllib.Vector 对象执行预测。

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

    最后,非分布式模型通常没有那么复杂。对于线性模型,您只需要截距、系数和一些基本的数学函数和线性代数库(如果您想要一个不错的性能)。

    o.a.s.ml 模型稍微难以处理,但有一些外部工具试图解决这个问题。详情可以查看开发者列表(Deploying ML Pipeline Model)的相关讨论。

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

    【讨论】:

      猜你喜欢
      • 2016-12-12
      • 1970-01-01
      • 1970-01-01
      • 2018-12-08
      • 1970-01-01
      • 1970-01-01
      • 2010-09-07
      • 2016-07-08
      • 2022-01-24
      相关资源
      最近更新 更多