【问题标题】:How i can integrate Apache Spark with the Play Framework to display predictions in real time?如何将 Apache Spark 与 Play Framework 集成以实时显示预测?
【发布时间】:2015-07-20 18:19:42
【问题描述】:

我正在使用 Apache Spark 进行一些测试,用于我在大学的最后一个项目。我有一个数据集,用于生成决策树,并对新数据进行一些预测。

未来,我想把这个项目用在生产中,我会生成一个决策树(批处理),并通过网络界面或移动应用程序接收新数据,对那个条目的类别进行预测,并立即将结果告知用户。并且将这些新条目存储一段时间后生成新的决策树(批处理),并不断重复此过程。

尽管 Apache Spark 具有执行批处理的目的,但有流式 API 可以让您接收实时数据,在我的应用程序中,这些数据只会被构建在批处理中的模型使用决策树,以及预测的速度如何,它可以让用户快速得到答案。

我的问题是将 Apache Spark 与 Web 应用程序集成的最佳方法是什么(计划使用 Play Framework scala 版本)?

【问题讨论】:

  • “最佳”的标准是什么?

标签: scala apache-spark playframework-2.0 spark-streaming apache-spark-mllib


【解决方案1】:

您在使用 Spark 时会遇到的一个问题是启动和构建 SparkContext 需要一些时间。如果你想通过网络调用进行 Spark 查询,每次都启动 spark-submit 是不切实际的。相反,您需要将您的驱动程序应用程序(这些术语稍后会更有意义)转变为 RPC 服务器。

在我的应用程序中,我嵌入了一个 Web 服务器 (http4s),因此我可以在 JavaScript 中执行 XmlHttpRequests 来直接查询我的应用程序,这将返回 JSON 对象。

【讨论】:

  • 我对您的解决方案很感兴趣。运行如此长期的 Spark 作业时是否会出现显着的性能损失?我的意思是后面的应用程序会因为 GC 压力而降低性能吗?
【解决方案2】:

Spark 是一个快速的大规模数据处理平台。这里的关键是大规模数据。在大多数情况下,处理这些数据的时间不足以满足普通 Web 应用用户的期望。离线执行处理并将 Spark 处理的结果写入例如数据库是更好的做法。然后,您的 Web 应用程序可以通过查询该数据库有效地检索这些结果。

话虽如此,spark job server 服务器提供了一个用于提交 Spark 作业的 REST api。

【讨论】:

  • 是的,我将离线创建模型,并利用此模型进行实时预测。
【解决方案3】:

Spark (

您可以让 Akka 担心反序列化,只要两个系统在其类路径上具有相同的类定义,这将起作用。

如果您想更进一步,您可以编写 Akka Streams 代码,将数据流发送到您的 Play 应用程序。

【讨论】:

  • 从 1.6.0 开始,Spark 不再使用 Akka
  • 是的,这是真的。为了后代,我会留下这个。或者直到有人决定应该删除它;)同时,我会调整答案以表明。
【解决方案4】:

检查此链接,您需要在本地模式下运行 spark(在您的 Web 服务器上),并且离线 ML 模型应保存在 S3 中,以便您可以从 Web 应用程序访问模型并缓存模型一次,然后您将在本地模式下连续运行 spark 上下文。

https://commitlogs.com/2017/02/18/serve-spark-ml-model-using-play-framework-and-s3/

另一种方法是使用 Livy(火花上的 REST API 调用)

https://index.scala-lang.org/luqmansahaf/play-livy-module/play-livy/1.0?target=_2.11

我猜 s3 选项是前进的方向,如果批处理模型发生变化,您需要刷新网站缓存(停机时间)几分钟。

查看这些链接

https://github.com/openforce/spark-mllib-scala-play/blob/master/app/modules/SparkUtil.scala

https://github.com/openforce/spark-mllib-scala-play

谢谢 斯里

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-06
    • 2015-05-13
    • 2015-12-28
    • 1970-01-01
    • 1970-01-01
    • 2018-09-07
    • 2021-11-16
    相关资源
    最近更新 更多