我想在我的restful web服务中运行Spark SQL查询,那么如何通过Jersey上下文运行Spark Context?我需要将我的Spark SQL请求传递给集群,然后通过REST API将结果返回给用户。但是在Spark Documentations中,没有办法在java代码中运行Spark SQL查询而无需将jar文件提交到集群(master / slaves)。
答案 0 :(得分:4)
如果您使用Spark版本> 1.4然后您可以使用SparkLauncher来运行您的应用程序。
import org.apache.spark.launcher.SparkLauncher;
public class MyLauncher {
public static void main(String[] args) throws Exception {
Process spark = new SparkLauncher()
.setAppResource("/my/app.jar")
.setMainClass("my.spark.app.Main")
.setMaster("local")
.setConf(SparkLauncher.DRIVER_MEMORY, "2g")
.launch();
spark.waitFor();
}
}
为了使它工作,你应该给它一个jar文件。由于您希望运行SparkSQL查询,因此您可以将其打包在单个jar文件中,或者您可以将jar作为参数来执行您要执行的查询。
需要注意的是,每次要执行查询时都必须启动SparkContext。如果你不介意等待它,那就没关系了。但是如果时间是一件大事,那么我建议你写一个单独的服务,它会使spark上下文一直响起,你的应用程序会调用它。