2017-11-30 6 views
0

pysparkのmapPartitions()に渡す関数内でprintステートメントを使用してコードをデバッグできないという問題をどのように処理できますか?mapPartitionsに渡された関数をデバッグする方法

は例を考えてみましょう:FUNCインサイド

def func(kv_iterator): 
    for key, value in iterator: 
     #do fancy stuff 
     print('This print statement does not reach the driver program') 
    return [result] 

result = someRdd.mapPartitions(func) 

を私は反復可能オブジェクトとインデックスに多くの作業を行いたいのですが、私はFUNC内部変数への過剰せずに自分のコードをテストすることができます。

print文をどういうわけか1つのパーティションから私のドライバのprogramm/outputチャンネルにリダイレクトすることはできますか?

答えて

0

次のいずれかを使用することができます。

  • localモードを使用します。すべての出力をコンソールに表示する必要があります。そうでない場合は、おそらくコードが実行されることはありません。result.count()result.foreach(lambda _: None)などの操作を試してください。おそらくこれが問題です。
  • ファイルにstdout(および標準エラー出力)をリダイレクトします。基本prints使用file引数の場合:

    print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False) 
    
  • 使用リモートデバッガ - How can pyspark be called in debug mode?

しかし、最も重要なもの - スパーク外のテスト機能。 mapPartitionsで使用される関数は、Iterableを受け入れる必要があります(具体的な実装は通常itertools.chainです)。Iterableを返します。

関連する問題