scala - 是否可以在不进入 spark-shell 的情况下运行 Spark Scala 脚本?
问题描述
我知道运行基于 Scala 的 spark 代码的唯一两种方法是将 Scala 程序编译成 jar 文件并使用 spark-submit 运行它,或者通过在 spark-shell 中使用 :load 运行 Scala 脚本。我的问题是,可以直接在命令行上运行 Scala 文件,而无需先进入 spark-shell 然后发出 :load?
解决方案
您可以简单地使用标准输入重定向spark-shell
:
spark-shell < YourSparkCode.scala
这个命令启动一个 spark-shell,YourSparkCode.scala
逐行解释你的代码并在最后退出。
另一种选择是使用命令-I <file>
选项spark-shell
:
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")
推荐阅读
- javascript - 如何将数据从 express 中间件直接传递回客户端 JWT 和 Express 中间件
- hammerspoon - 如何区分 iTerm2 窗口以仅使用 Hammerspoon 移动/调整其中一个窗口的大小?
- azure - Microsoft Azure Maps / Postman 上传错误
- for-loop - 在元组中添加数字
- ios - 蓝牙键盘在 Flutter webview 上不起作用。(iOS + 硬件键盘)
- android - 什么是最近在 Android API 30 中过时的 Handler 的替代品?
- azure-devops - 如何从发布管道中调用 Azure Function 获得响应?
- c# - 使用 C# 将文件写入 Linux 中的网络位置
- c# - 在 C# Web 应用程序中获取文本框的值时面临的问题,详细信息如下:
- math - 贝叶斯滤波器推导混淆