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

Met*_*est 7 scala apache-spark spark-shell

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

ego*_*doe 7

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

spark-shell < YourSparkCode.scala
Run Code Online (Sandbox Code Playgroud)

此命令启动一个 Spark-Shell,逐行解释您的YourSparkCode.scala命令并在最后退出。

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

spark-shell -I YourSparkCode.scala
Run Code Online (Sandbox Code Playgroud)

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

[UDP] 传递参数

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

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

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

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

spark-shell --conf spark.myscript.arg1=val1 --conf spark.yourspace.arg2=val2 < YourSparkCode.scala
Run Code Online (Sandbox Code Playgroud)

(请注意,spark.属性名称中的前缀是强制性的,否则 Spark 会将您的属性视为无效而丢弃)

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

val arg1: String = spark.conf.get("spark.myscript.arg1")
val arg2: String = spark.conf.get("spark.myscript.arg2")
Run Code Online (Sandbox Code Playgroud)