我是Spark的新手。我有一个通过调用spark-shell运行每个spark sql查询的应用程序。因此,它将生成一组如下所示的查询,并调用spark-shell命令来逐个处理这些查询。
val Query = spark.sql(“”“ SELECT userid AS用户ID, 评分AS评分, movieid AS movieid FROM default.movieTable“”“);
现在,我想使用spark-submit而不是spark-shell运行此应用程序。谁能告诉我该怎么做?
答案 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")
这将实现您对单个查询的意图,您将不得不遍历查询并将其传递给上面。