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

标签 scala apache-spark spark-shell

我知道运行基于 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/

相关文章:

scala - Scala : return, 本地的 Reader monad 和序列

scala - Spark 的 RDD.map() 不会执行,除非 RDD 内的项被访问

apache-spark - 对于相同的配置,Spark s3a会引发403错误

apache-spark - 使用 utf-8 字符编码从 hive 中选择数据

scala - Specs2 - "should not equal to"- 如何检查不相等?

scala - 自定义 Scala REPL 问题

scala - 如何以orc格式在已创建的配置单元表中加载excel数据

Java Spark MLlib : There is an error "ERROR OWLQN: Failure! Resetting history: breeze.optimize.NaNHistory:" for Logistic Regression in ml library

apache-spark - 忽略非 Spark 配置属性: hive. exec.dynamic.partition.mode