是否可以在不进入 spark-shell 的情况下 运行 Spark Scala 脚本?
Is it possible to run a Spark Scala script without going inside spark-shell?
我知道 运行 基于 Scala 的 spark 代码的唯一两种方法是将 Scala 程序编译成 jar 文件并 运行 使用 spark-submit,或者 运行在 spark-shell 中使用 :load 的 Scala 脚本。我的问题是,可以直接在命令行上 运行 Scala 文件,而无需先进入 spark-shell 然后发出 :load?
可以通过 spark-submit 实现。
https://spark.apache.org/docs/latest/submitting-applications.html
你甚至可以把它放到 bash 脚本中或者创建 sbt-task
https://www.scala-sbt.org/1.x/docs/Tasks.html
运行 你的代码。
您可以简单地使用标准输入重定向 spark-shell
:
spark-shell < YourSparkCode.scala
此命令启动一个 spark-shell,逐行解释您的 YourSparkCode.scala
并在最后退出。
另一种选择是使用 spark-shell
命令的 -I <file>
选项:
spark-shell -I YourSparkCode.scala
唯一的区别是后一个命令将您留在 shell 中,您必须发出 :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")
我知道 运行 基于 Scala 的 spark 代码的唯一两种方法是将 Scala 程序编译成 jar 文件并 运行 使用 spark-submit,或者 运行在 spark-shell 中使用 :load 的 Scala 脚本。我的问题是,可以直接在命令行上 运行 Scala 文件,而无需先进入 spark-shell 然后发出 :load?
可以通过 spark-submit 实现。
https://spark.apache.org/docs/latest/submitting-applications.html
你甚至可以把它放到 bash 脚本中或者创建 sbt-task https://www.scala-sbt.org/1.x/docs/Tasks.html 运行 你的代码。
您可以简单地使用标准输入重定向 spark-shell
:
spark-shell < YourSparkCode.scala
此命令启动一个 spark-shell,逐行解释您的 YourSparkCode.scala
并在最后退出。
另一种选择是使用 spark-shell
命令的 -I <file>
选项:
spark-shell -I YourSparkCode.scala
唯一的区别是后一个命令将您留在 shell 中,您必须发出 :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")