異なるPythonカーネル間でDataFrameをリロードしないでください


10

変数(大きなテーブル/データフレーム)をメモリに保持し、複数のipythonノートブックで共有する方法はありますか?

私はMATLABの永続変数に概念的に似ている何かを探しています。そこで、複数の個別のエディター(ノートブック)からカスタム関数/ライブラリーを呼び出し、その外部関数に結果(または大きなテーブル)をキャッシュさせることができます。

頻繁に使用するテーブル(ノートブックから呼び出されるカスタムライブラリを介して読み込まれる)の再読み込みは避けたいと思います。これは、新しい分析を開始するたびに約2〜3分かかるためです。


1
これは可能ではないようで、注意しないと多くの頭痛の種となる可能性があります。msgpackのような効率的な形式にデータを保持することはオプションではありませんか?
Emre、

@Emreありがとうございます。msgpackのトリッキーな部分は、テーブルを読み取る必要があるという根本的な問題を解決しないことです。また、両刃の剣でもあります。テーブルの元の形式と比較して約40%の時間を節約できますが、手動の分析も元のデータから少し離れています(クリーン度が低い)
tsttst

最良のオプションは、msgpackと組み合わせて使用​​できるredisのようなキャッシュだと思います。少なくとも、ディスクの代わりにメモリに永続化できます。
Emre

1
私はFeatherの使用を検討します-それは非常に高速です
MaxU

1
Sparkとそのキャッシュはオプションですか?ノートブックでのSparkの使用は、最初の読み取り/処理を行うために本質的に制限されます
Dolan Antenucci

回答:


4

ユースケースにとって重要な場合は、Apache Zeppelinに切り替えてみてください。すべてのSparkノートブックは同じSparkコンテキスト、同じPython実行環境を共有します。 https://zeppelin.apache.org/

したがって、あなたが求めていることは、ツェッペリンで生まれながらに起こります。または完全にするために、すべてのSparkノートブック間で同じSparkコンテキスト/同じPython環境を共有するオプションです(Zeppelinでは「ノート」と呼ばれます)。

ZeppelinのSparkインタープリター共有オプション

したがって、コンテキストをグローバルに共有する(デフォルトのZeppelinの動作)、ノートごと(可能な唯一のJupyterの動作)、またはユーザーごとに共有することを選択できます。

Zeppelinに切り替えられない、または切り替えたくない場合は、ノートブック間で共通のデータフレームを共有する他のオプションを確認してください。

ps。https://issues.apache.org/jira/browse/ZEPPELIN-1793が実装されるまで、現時点ではipynbファイルをZeppelinにインポートできません(独自のノートブック形式がjsonファイルとして保存されています)。ほとんどの場合、手動で変換することはそれほど難しくありませんが。


1
ありがとうございました。おそらくipython / jupyterノートブックから切り替えます。ツェッペリンは、定義された変数のコンテンツのみを選択的に共有する可能性をサポートしていますか?(MATLABのように)
tsttst

間違いなく-いいえ、それはプロセスレベルで制御されています。ですから、それは全部かゼロかです。注ごとを選択した場合、Jupyterと同じ動作になります。グローバルに選択すると、すべてが共有されます。特にマルチユーザー環境ではリソースの消費が少ないため、通常はグローバルに使用します。しばらくMatlabを使用していませんが、選択した変数のみを共有する必要がある場合は、JupyterまたはZeppelinの場合は、Apache ArrowまたはFeatherを確認できます。
Tagar
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.