【问题标题】:Execute the scala script through spark-shell in silent mode通过 spark-shell 以静默模式执行 scala 脚本
【发布时间】:2020-01-01 08:23:11
【问题描述】:

需要通过 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)终止脚本)。
见this question with a good example。

它还需要一个“静音模式”,它预计不会污染output.txt。

假设 Spark v2.2+。


PS:在很多情况下(通常是小型工具和模块/算法测试),Spark 解释器 可以比 编译器 更好......请,“让我们编译!”这里不是答案。

【问题讨论】:

  • 请减少问题中的重复内容,并在以后使用拼写检查器。
  • 创建一个 jar 并改用 spark-submit。
  • REPL 不是为了这个。如果你的file.scala 是纯scala 代码,那么你可以使用scalac 编译它并使用java 或scala 解释器运行类文件。如果是 spark 应用,可以使用 spark-submit。

标签: scala apache-spark spark-shell


【解决方案1】:

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 的日志记录。配置示例为here。禁用$SPARK-HOME/conf/log4j.properties 中的任何类型的登录应该只允许您看到 pritnlns。但我不会在 printlns 中采用这种方法。应使用带有 log4j 的通用日志记录而不是 printlns。您可以对其进行配置,以便获得与 printlns 相同的结果。它归结为配置模式。这个answer 提供了一个可以解决您的问题的模式示例。

【讨论】:

  • 嗨。我说使用System.exit(0)...而“退出”不是“安静”,赏金是关于“安静输出”...
  • @PeterKrauss 你在“安静”下是什么意思?
  • 嗨,:q 的“退出”不是“安静”。问题是关于“安静模式”(verbose=none)...请阅读问题和问题的赏金,“参见 UPDATING 2019 部分:预计不会污染output.txt”
  • @PeterKrauss 您将日志指向output.txt 并且只想保留特定的输出?
  • 是的,只有println(),没有“详细”的未经请求的输出。
【解决方案2】:

添加到@rluta 的答案。您可以在 shell 脚本中调用spark-shell 命令。在 shell 脚本中说出以下内容:

spark-shell < yourfile.scala

但这需要您将代码行保持在一行内,以防语句写在不同的行上。

或

echo :quit | spark-shell -i yourfile.scala

这应该

【讨论】:

  • 嗨,:q 的“退出”不是“安静”。问题是关于“安静模式”(verbose=none)...请阅读问题和问题的赏金,“参见 UPDATING 2019 部分:预计不会污染output.txt”
【解决方案3】:

最好的方法是明确地将你的 scala 代码编译成一个 jar 并使用spark-submit,但如果你只是在寻找一个快速的迭代循环,你可以在解析你的 scala 代码后简单地发出一个:quit:

echo :quit | scala-shell -i yourfile.scala

【讨论】:

  • 有一个scala命令,用于yourfile.scala,是System.exit(0)...但是“退出”或“退出”不是“安静”.
猜你喜欢
  • 2017-03-09
  • 2014-10-06
  • 2020-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-25
  • 1970-01-01
  • 2013-04-17
相关资源
最近更新 更多