是否可以在不进入spark-shell的情况下运行Spark Scala脚本?

问题描述 投票:3回答:2

我知道运行基于Scala的spark代码的唯一两种方法是将Scala程序编译到jar文件中并通过spark-submit运行,或者通过在spark-shell中使用:load运行Scala脚本。我的问题是,有可能直接在命令行上运行Scala文件,而无需先进入spark-shell,然后发出:load?

scala apache-spark spark-shell
2个回答
2
投票

您可以简单地将stdin重定向与spark-shell一起使用:

spark-shell < YourSparkCode.scala

此命令启动一个spark-shell,逐行解释YourSparkCode.scala,并在最后退出。

另一个选项是使用-I <file>命令的spark-shell选项:

spark-shell -I YourSparkCode.scala

唯一的区别是,后一个命令将您留在外壳程序内,并且您必须发出:quit命令来关闭会话。

[UDP]传递参数

由于spark-shell不会将源代码作为应用程序执行,而只是逐行解释源文件,因此您不能直接将任何参数作为应用程序参数传递。

幸运的是,可能有很多选择可以达到相同的目的(例如,将另一个文件中的参数外部化并从脚本的开头就读取它)。

但是我个人认为Spark配置是最干净,最方便的方法。

您通过--conf选项传递参数:

spark-shell --conf spark.myscript.arg1=val1 --conf spark.yourspace.arg2=val2 < YourSparkCode.scala

(请注意,属性名称中的spark.前缀为必填项,否则Spark将把您的属性视为无效)

并按如下所示在您的Spark代码中读取这些参数:

val arg1: String = spark.conf.get("spark.myscript.arg1")
val arg2: String = spark.conf.get("spark.myscript.arg2")

0
投票

可以通过提交火花。

https://spark.apache.org/docs/latest/submitting-applications.html

您甚至可以将其放入bash脚本中,或者创建sbt-taskhttps://www.scala-sbt.org/1.x/docs/Tasks.html运行您的代码。

© www.soinside.com 2019 - 2024. All rights reserved.