私はDaskでSparkのunpersist
と同等のものを見つけようとしています。それは目的を前処理するための多くの集計を計算する を必要とするため、呼び出し元のコンテキストがすでに例えば、大df
続いているDaskでデータの重複がないインクリメンタルキャッシングを実現する方法は?
- :明示的なunpersistのための私の必要性 状況で発生します。
- 呼び出しコンテキストは、反復アルゴリズムを実行するため、persistを呼び出す必要がある関数、たとえば を呼び出します。
基本的な例は次のようになります。スパークで
def iterative_algorithm(df, num_iterations):
for iteration in range(num_iterations):
# Transformation logic requiring e.g. map_partitions
def mapper(df):
# ...
return df
df = df.map_partitions(mapper)
df = df.persist()
# Now I would like to explicitly unpersist the old snapshot
return df
、問題は明示的に古いスナップショット を解放することによって解決することができます。明らかにDaskは明示的なunpersist
を持っていませんが、基礎となる先物の参照カウントを介して という問題を処理します。これは、呼び出し元のコンテキストが古いフューチャーに対して参照 を保持し、サブファンクションが変更された への参照を保持しているため、上記の例 がデータを複製することを意味します。私の実際のユースケースでは、このような変換呼び出しにいくつかのネストされたレベルがあり、データが複数回も重複してしまいます。
追加コピーを行わずに反復キャッシュを解決する方法はありますか?
あなたの 'modify_inplace'関数に' df.divisions'も含めたいと思うでしょう – MRocklin