1つのゴチャはprint()
です。ステートメントはログファイルには作成されませんので、スパークログ機能を使用する必要があります。
# utility method for logging
log4jLogger = sc._jvm.org.apache.log4j
# give a meaningful name to your logger (mine is CloudantRecommender)
LOGGER = log4jLogger.LogManager.getLogger("CloudantRecommender")
def info(*args):
print(args) # sends output to notebook
LOGGER.info(args) # sends output to kernel log file
def error(*args):
print(args) # sends output to notebook
LOGGER.error(args) # sends output to kernel log file
機能を使用するので、同じように私のノートで:pysparkでは、私は、ログファイルに出力を送信するだけでなく、ノートブックが手動で実行されたときにノートブックにそれを印刷しユーティリティ関数を作成し
info("some log output")
私は、ログファイルをチェックすると、私は私のログアウトが書かれてきている見ることができます。
! grep 'CloudantRecommender' $HOME/logs/notebook/*pyspark*
kernel-pyspark-20170105_164844.log:17/01/05 10:49:08 INFO CloudantRecommender: [Starting load from Cloudant: , 2017-01-05 10:49:08]
kernel-pyspark-20170105_164844.log:17/01/05 10:53:21 INFO CloudantRecommender: [Finished load from Cloudant: , 2017-01-05 10:53:21]
例外は、どちらかのログファイルに送信されます表示されませんので、あなたはコードをラップする必要があります。 tryブロックに格納し、エラーを記録します。
import traceback
try:
# your spark code that may throw an exception
except Exception as e:
# send the exception to the spark logger
error(str(e), traceback.format_exc(), ts())
raise e
注意:デバッグ中に私を襲ったもう一つの落とし穴は、スケジュールされたジョブは、ノートブックの特定のバージョンを実行することです。ノートブックの新しいバージョンを保存するときにスケジュールジョブを更新することを確認します。
「!」に簡略化することはできますか? ls $ HOME/logs/notebook'? –
はい、それも可能です。 –