Java 如何将ApacheSpark与Spring MVC web应用程序集成以进行交互式用户会话
我正在尝试使用ApacheSparkMLLIB构建一个电影推荐系统。 我已经用java编写了一段推荐程序代码,当使用Java 如何将ApacheSpark与Spring MVC web应用程序集成以进行交互式用户会话,java,spring-mvc,apache-spark,machine-learning,apache-spark-mllib,Java,Spring Mvc,Apache Spark,Machine Learning,Apache Spark Mllib,我正在尝试使用ApacheSparkMLLIB构建一个电影推荐系统。 我已经用java编写了一段推荐程序代码,当使用spark submit命令运行时,推荐程序工作正常 我的run命令如下所示 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.movierensalsextended”--master local[4]/h
spark submit
命令运行时,推荐程序工作正常
我的run命令如下所示
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.movierensalsextended”--master local[4]/home/sarvesh/Desktop/spark test/recommender.jar/home/sarvesh/Desktop/spark test/ml last small/movies.csv
现在我想在现实世界场景中使用我的推荐程序,作为一个web应用程序,在其中我可以查询推荐程序以给出一些结果
我想构建一个springmvcweb应用程序,它可以与apachespark上下文交互,并在被询问时给出结果
我的问题是如何构建一个与集群上运行的apachespark交互的应用程序。因此,当一个请求到达控制器时,它应该接受用户查询并获取与控制台上的spark submit
命令输出相同的结果
据我搜索,我发现我们可以使用Spark SQL,与JDBC集成。但我没有找到任何好的例子
提前感谢。要与数据模型交互(调用其调用方法?),可以在驱动程序中构建rest服务。此服务侦听请求,并使用来自请求的输入调用模型的predict方法,并返回结果 http4s()可用于此目的 Spark SQL与此无关,因为它使用SQL功能处理数据分析(您已经完成了)
希望这有帮助。针对这种情况,开发了一个REST界面,用于午餐和共享spark jobs的上下文 请查看此处的文档:
要隔离用户会话并以隔离的方式显示结果,您可能需要使用具有绑定用户标识的队列。如果结果需要时间,使用此标识,您可以向用户显示相应的结果。只需在Spring中将spark上下文和会话作为bean传递即可
@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的配置
这里提供了带弹簧和火花的完整工作代码
我有点晚了,但这可以帮助其他用户。 如果需要从远程获取数据,那么可以考虑使用HiVERIFIFTServer 2。 此服务器将Spark SQL(缓存表和临时表)公开为JDBC/ODBC数据库 因此,您可以使用JDBC/ODBC驱动程序连接到Spark,并从SQL表访问数据 要执行上述操作:
config.set("hive.server2.thrift.port","10015");
config.set("spark.sql.hive.thriftServer.singleSession", "true");
B.然后,将SQL上下文传递给thrift server,并按如下方式启动它:
HiveThriftServer2.startWithContext(session.sqlContext());
Connection con = DriverManager.getConnection("jdbc:hive2://localhost:10015/default", "", "");
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("select count(1) from ABC");
嗨,你找到解决办法了吗?我也有类似的要求。谢谢