2017-03-29 4 views
6

私はJupyterのノートブックとPythonカーネルでSparkContextを使って作業しています。同僚は、Sparkイベントをipykernelイベントで結ぶPythonコードを書いています。ノートブック・セルからモジュールをインポートすると、Python 2.7と3.5、Spark 1.6と2.x、Linuxのみをサポートする必要があります。モジュールがロードされた後のPythonスタートアップコードの実行

ここで、すべてのPythonカーネルに対してこのコードを自動的に有効にします。私はsitecustomize.pyに輸入しました。 Spark 2.xではうまく動作しますが、Spark 1.6ではうまく動作しません。 Spark 1.6のカーネルではもうscが得られません。何かが台無しになり、matplotlib.cbookのような無関係のインポートが失敗します。私はタイマを使用して数秒間そのインポートを遅らせると動作します。 明らかに、sitecustomize.pyのコードは、Sparkとipykernelを接続するモジュールをインポートするには早すぎます。

Sparkやipykernelが完全に初期化されるまで、そのインポートを遅らせる方法を探しています。しかし、ノートブックのセルが実行される前に、カーネルの起動の一環として実行する必要があります。 sys.argvが初期化されるまでコード実行を遅延させるためにthis trickが見つかりました。しかし、私はscのようなグローバル変数では動作しないと考えていますが、Pythonのグローバル変数はまだモジュールのローカルであると考えています。これまでのところ、最高のものは、あるモジュールがsys.modulesにあるかどうか毎秒タイマーを使って調べることです。しかし、完全に初期化されたモジュールとロード中のモジュールを区別する方法がわからないため、これはあまり信頼できません。

起動時に遅く実行される起動コードをフックする方法に関するアイデアはありますか? pysparkやipykernelに固有の解決策が私のニーズを満たすでしょう。

+0

は、たとえば、あなたが入れてしまうでしょう...それは十分ではありません。私はインポートが確実に機能するようにすることができますが、意図した機能は後で動作するかもしれません。インポート時にロードされたモジュールのリストは同一でした。 –

+0

'PYTHONSTARTUP'環境変数をチェックしましたか? 'python --help'から:*' PYTHONSTARTUP':対話型起動時に実行されるファイル(デフォルトなし)* –

+0

@ piotr-dobrogost:これは対話型起動ではありません。私たちはPythonに '-m ipykernel'を呼び出してIPythonカーネルを起動します。 –

答えて

2

ええ、あなたは本当にあなたが遭遇したエラーについて多くの詳細を与えていません。

ipythonカーネルの起動時の動作をカスタマイズする標準的な方法は、設定ファイルをセットアップしてexec_linesオプションを設定することです。私は、モジュールの存在をチェックして、いくつかのより多くの周りを果たし~/.ipython/profile_default/ipython_config.py

# sample ipython_config.py 
c = get_config() 

c.InteractiveShellApp.exec_lines = [ 
    'import numpy', 
    'import scipy' 
] 
c.InteractiveShellApp.exec_files = [ 
    'mycode.py', 
    'fancy.ipy' 
] 
+0

エラーメッセージやログ出力など何も表示されません。 –

+0

ipykernelにも拡張機能をロードするメカニズムがあることがわかりますが、これが私の問題を解決するかどうかはまだ分かりませんが、確かに私の答えです質問。 –

関連する問題