如何将Apache Spark与Spring MVC Web应用程序集成以进行交互式用户会话

我正在尝试使用Apache Spark MLlib构建一个电影推荐器系统。我已经用java为推荐器编写了一个代码,并且在使用命令运行时可以正常工作。spark-submit

我的运行命令如下所示

bin/spark-submit --jars /opt/poc/spark-1.3.1-bin-hadoop2.6/mllib/spark-mllib_2.10-1.0.0.jar --class "com.recommender.MovieLensALSExtended" --master local[4] /home/sarvesh/Desktop/spark-test/recommender.jar /home/sarvesh/Desktop/spark-test/ml-latest-small/ratings.csv /home/sarvesh/Desktop/spark-test/ml-latest-small/movies.csv

现在我想在实际场景中使用我的推荐器,作为一个Web应用程序,我可以在其中查询推荐器以提供一些结果。

我想构建一个Spring MVC Web应用程序,它可以与Apache Spark Context交互,并在被问到时给我结果。

我的问题是,我如何构建一个与在集群上运行的Apache Spark交互的应用程序。因此,当请求到达控制器时,它应该采用用户查询并获取与控制台上的命令输出相同的结果。spark-submit

据我搜索,我发现我们可以使用Spark SQL,与JDBC集成。但我没有找到任何好的例子。

提前致谢。


答案 1

只需在春季将火花上下文和会话作为豆子传递即可

@Bean
public SparkConf sparkConf() {
    SparkConf sparkConf = new SparkConf()
            .setAppName(appName)
            .setSparkHome(sparkHome)
            .setMaster(masterUri);

    return sparkConf;
}

@Bean
public JavaSparkContext javaSparkContext() {
    return new JavaSparkContext(sparkConf());
}

@Bean
public SparkSession sparkSession() {
    return SparkSession
            .builder()
            .sparkContext(javaSparkContext().sc())
            .appName("Java Spark Ravi")
            .getOrCreate();
}

同样适用于基于 xml 的配置

这里存在带有弹簧和火花的完全工作的代码

https://github.com/ravi-code-ranjan/spark-spring-seed-project


答案 2

若要与数据模型交互(调用其 invoke 方法?),可以在驱动程序中生成 rest 服务。此服务侦听请求,并使用请求的输入调用模型的预测方法,并返回结果。

http4s(https://github.com/http4s/http4s)可用于此目的。

Spark SQL不相关,因为它使用sql功能处理数据分析(您已经完成)。

希望这有帮助。


推荐