繁体   English   中英

静默模式下通过spark-shell执行scala脚本

[英]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>模式

更新(2019 年 10 月)终止脚本

这个问题也是关于运行一个终止的脚本,即一个由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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM