Как я могу интегрировать Apache Spark с Play Framework для отображения прогнозов в режиме реального времени?

Я провожу тестирование с Apache Spark для своего последнего проекта в колледже. У меня есть набор данных, который я использую для создания дерева решений и делаю некоторые прогнозы на основе новых данных.

В дальнейшем думаю использовать этот проект в продакшн, где бы генерировал дерево решений (пакетная обработка), а через веб-интерфейс или мобильное приложение получал новые данные, делая прогноз класса той записи, и сообщал результат мгновенно пользователю. А также сохраните эти новые записи, чтобы через некоторое время создать новое дерево решений (пакетная обработка) и постоянно повторять этот процесс.

Несмотря на то, что Apache Spark предназначен для выполнения пакетной обработки, существует потоковый API, который позволяет получать данные в реальном времени, и в моем приложении эти данные будут использоваться только моделью, построенной в пакетном процессе с деревом решений, и поскольку прогноз довольно быстрый, он позволяет пользователю быстро получить ответ.

Мой вопрос: каковы наилучшие способы интеграции Apache Spark с веб-приложением (планируете использовать версию Play Framework scala)?


person Douglas Arantes    schedule 10.05.2015    source источник
comment
«Лучший» по каким критериям?   -  person    schedule 10.05.2015


Ответы (4)


Одна из проблем, с которой вы столкнетесь со Spark, — запуск и создание SparkContext занимает некоторое время. Если вы хотите выполнять запросы Spark через веб-вызовы, нецелесообразно каждый раз запускать spark-submit. Вместо этого вы захотите превратить ваше приложение-драйвер (эти термины станут более понятными позже) в сервер RPC.

В моем приложении я встраиваю веб-сервер (http4s), поэтому я могу выполнять XmlHttpRequests в JavaScript, чтобы напрямую запрашивать мое приложение, которое будет возвращать объекты JSON.

person David Griffin    schedule 10.05.2015
comment
Я очень заинтересован в вашем решении. Есть ли значительное снижение производительности при выполнении такого долгосрочного задания Spark? Я имею в виду, ухудшится ли производительность более позднего приложения из-за давления GC? - person yjshen; 10.05.2015

Spark — это быстрая платформа для крупномасштабной обработки данных. Ключевым моментом здесь являются крупномасштабные данные. В большинстве случаев время обработки этих данных будет недостаточно быстрым, чтобы оправдать ожидания обычного пользователя веб-приложения. Гораздо лучше выполнять обработку в автономном режиме и записывать результаты обработки Spark, например, в базу данных. Затем ваше веб-приложение может эффективно извлекать эти результаты, запрашивая эту базу данных.

При этом сервер заданий Spark предоставляет REST API для отправки заданий Spark.

person cmd    schedule 22.05.2015
comment
Да, я создам модель в автономном режиме и буду использовать ее для прогнозирования в реальном времени. - person Douglas Arantes; 23.05.2015

Spark (‹ v1.6) использует Akka внизу. Как и Play. Вы должны иметь возможность написать действие Spark в качестве актера, который взаимодействует с принимающим актером в системе Play (которую вы также пишете).

Вы можете позволить Akka позаботиться о де/сериализации, которая будет работать до тех пор, пока обе системы имеют одинаковые определения классов в своих путях к классам.

Если вы хотите пойти дальше, вы можете написать код Akka Streams, который направляет поток данных в ваше приложение Play.

person WeaponsGrade    schedule 06.08.2016
comment
Начиная с версии 1.6.0 Spark больше не используется Akka. - person Alex Shcherbyna; 06.06.2017
comment
Да это правда. Я оставлю это для потомков. Или до тех пор, пока кто-нибудь не решит, что его нужно удалить ;) Тем временем я поправлю ответ, чтобы указать. - person WeaponsGrade; 25.01.2018

проверьте эту ссылку, вам нужно запустить искру в локальном режиме (на вашем веб-сервере), а автономная модель ML должна быть сохранена в S3, чтобы вы могли получить доступ к модели из веб-приложения и кэшировать модель только один раз, и у вас будет контекст искры работает в локальном режиме непрерывно.

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

Спасибо Шри

person sri hari kali charan Tummala    schedule 12.05.2018