我知道运行基于 Scala 的 Spark 代码的唯一两种方法是将 Scala 程序编译成 jar 文件并使用 spark-submit 运行它,或者通过在 spark-shell 中使用 :load 运行 Scala 脚本。我的问题是,可以直接在命令行上运行 Scala 文件,而无需先进入 spark-shell 然后发出 :load?
最佳答案
您可以简单地将 stdin 重定向与 spark-shell
一起使用:
spark-shell < YourSparkCode.scala
此命令启动一个 spark-shell,解释您的
YourSparkCode.scala
一行一行,最后退出。另一种选择是使用
-I <file>
spark-shell
的选项命令:spark-shell -I YourSparkCode.scala
唯一的区别是后一个命令将您留在 shell 中,您必须发出
:quit
命令关闭 session 。[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-shell 的情况下运行 Spark Scala 脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60341676/