簡體   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