[英]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.