daskからベストを得る方法が混乱しています。ダンスパフォーマンス:ワークフロー疑問
問題 、私はいくつかの時系列が含まれているデータフレームを持っている(一人一人がkey
独自のを持っている)、私はそれらのすべてのそれぞれに機能my_fun
を実行する必要があります。パンダでそれを解決する1つの方法は df = list(df.groupby("key"))
で、my_fun
にマルチプロセッシングを適用します。パフォーマンスは、RAMの巨大な使用にもかかわらず、私のマシンではかなり良いし、グーグルクラウドコンピューティングでひどいです。 DASKで
私の現在のワークフローは次のとおりです。
import dask.dataframe as dd
from dask.multiprocessing import get
- はS3からデータを読み込みます。 14ファイル - > 14のパーティション
- `df.groupby( "キー")を適用(my_fun).to_frame.compute(GET = GET)
私はインデックスを設定していなかったとしてdf.known_divisions
がFalse
質問:
- はそれが
ncpu
の倍数としてdf.npartitions
を持っているか、それは問題ではない、より良いですか? thisから、インデックスをキーとして設定する方が良いようです。私の推測では、私は
DF [ "キー2"] =のDF [ "キー"] DF = df.set_index( "KEY2")
ような何かを行うことができるということですが、再度、Iドンこれが最善の方法であるかどうかは分かりません。
分散スケジューラを使用する方法が間違っているか 'client =クライアント()'と 'df = client.persist(df) – user32185
これはスケジューラを設定する最も簡単な方法です実験。さまざまなパラメータを明示的に指定したり、スケジューラの現在のPythonセッションを中止したり、複数のマシンに分散させたりすることができます。http://distributed.readthedocs.io/en/latest/setupを参照してください。 html。 – mdurant