使用spark提交运行spark应用程序

时间:2018-10-15 17:13:47

标签: java apache-spark apache-spark-sql spark-submit

我是Spark的新手。我有一个通过调用spark-shell运行每个spark sql查询的应用程序。因此,它将生成一组如下所示的查询,并调用spark-shell命令来逐个处理这些查询。

val Query = spark.sql(“”“ SELECT userid AS用户ID,         评分AS评分,         movieid AS movieid     FROM default.movi​​eTable“”“);

现在,我想使用spark-submit而不是spark-shell运行此应用程序。谁能告诉我该怎么做?

1 个答案:

答案 0 :(得分:3)

如果您使用的是scala,spark-submit将使用一个jar文件,则必须使用sbt作为依赖项/构建工具来创建一个scala项目,sbt可以将您的所有内容代码并将其捆绑到jar文件中。您可以遵循此guide。 -对于python和java,存在类似的方法

Update1: spark-shell用于进行快速实验,当调用spark-shell时,它会自动实例化SparkSession,因此当您要以编程方式实现此目的时,您需要调用此方法以编程方式。

例如:

val sparkSession: SparkSession = 
SparkSession.builder.appName("awesomeApp").getOrCreate()

// This import is needed to use the $-notation, and imported automatically in `spark-shell` by default
import sparkSession.implicits._

...
//code to generate/import/build your `movieTable` view/table
...

val queryOutputDf=sparkSession.sql(""" SELECT userid AS userid, rating AS rating, movieid AS movieid FROM default.movieTable""");

//the above output is a `dataframe`, it needs to be written to a file
queryOutputDf.rdd.map(_.toString()).saveAsTextFile("/path/to/a/file/with/good/name")

这将实现您对单个查询的意图,您将不得不遍历查询并将其传递给上面。