[英]Execute the scala script through spark-shell in silent mode
需要在静默模式下通过 spark-shell 执行 scala 脚本。 当我使用spark-shell -i "file.scala"
,执行后,我进入了 scala 交互模式。 我不想进入那里。
我试图执行 spark-shell -i "file.scala"。 但我不知道如何在静默模式下执行脚本。
spark-shell -i "file.scala"
执行后,我进入
scala>
我不想进入scala>
模式
这个问题也是关于运行一个终止的脚本,即一个由spark-shell -i script.scala > output.txt
运行的“scala 脚本”,它自己停止(内部指令System.exit(0)
终止脚本)。
用一个很好的例子看这个问题。
它还需要一个“静默模式” ,预计不会污染output.txt
。
假设Spark v2.2+ 。
PS:在很多情况下(通常是小工具和模块/算法测试), Spark 解释器可以比编译器更好......请“让我们编译!” 不是这里的答案。
spark-shell -i file.scala
保持解释器打开,因此System.exit(0)
需要位于脚本的末尾。 最合适的解决方案是将您的代码放入try {}
并将System.exit(0)
放入finally {}
部分。
如果需要记录日志,您可以使用以下内容:
spark-shell < file.scala > test.log 2>&1 &
如果您对编辑文件有限制并且无法添加System.exit(0)
,请使用:
echo :quit | scala-shell -i file.scala
UPD
如果你想抑制输出中除了 printlns 之外的所有内容,你必须关闭 spark-shell 的日志记录。 配置示例在这里。 在$SPARK-HOME/conf/log4j.properties
禁用任何类型的日志记录应该只允许您看到 pritnlns。 但是我不会在 printlns 中遵循这种方法。 应该使用带有 log4j 的通用日志记录而不是 printlns。 您可以对其进行配置,以获得与 printlns 相同的结果。 它归结为配置模式。 此答案提供了解决您的问题的模式示例。
最好的方法绝对是将您的 Scala 代码编译为 jar 并使用spark-submit
但如果您只是在寻找快速迭代循环,您可以在解析您的 Scala 代码后简单地发出:quit
:
echo :quit | scala-shell -i yourfile.scala
添加到@rluta 的答案中。 您可以在 shell 脚本中调用spark-shell
命令。 在 shell 脚本中说以下内容:
spark-shell < yourfile.scala
但这将要求您将代码行保留在一行中,以防将语句写在不同的行上。
或者
echo :quit | spark-shell -i yourfile.scala
这应该
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.