これで、dask DataFrame.appendに問題があります。私は主なデータから多くの派生的な特徴を生成し、それを主なデータフレームに追加します。その後、列のセットのダスクグラフが爆発します。ここで小さな例です:dask DataFrame.assignがダッシュグラフを吹き飛ばします
%pylab inline
import numpy as np
import pandas as pd
import dask.dataframe as dd
from dask.dot import dot_graph
df=pd.DataFrame({'x%s'%i:np.random.rand(20) for i in range(5)})
ddf = dd.from_pandas(df, npartitions=2)
dot_graph(ddf['x0'].dask)
here is the dask graph as expected
g=ddf.assign(y=ddf['x0']+ddf['x1'])
dot_graph(g['x0'].dask)
here the graph for same column is exploded with irrelevant computation
は私が生まれた列の多くの多くを持っている想像してみてください。したがって、特定の列の計算グラフには、他のすべての列の無関係な計算が含まれます。私。私の場合はlen(ddf ['someColumn'] .dask)> 100000です。だから、すぐに使えなくなる。
この問題は解決できますか?これを行うための既存の手段はありますか?そうでなければ、これを実装するにはどの方向に向けるべきですか?
ありがとうございます!
すぐにお返事ありがとうございます。私はすべての系列を一度に割り当てるというdf = df.assign(x = x、y = y、z = z)を使用していますが、それらの計算を必要としない列のグラフには追加ノードがあります。グラフの最適化の方法は、列のサブセットを取得したときに他のすべての計算をトリミングする方法ですか?私の回避策は、すべてを計算し、hdfに保存してロードし、必要に応じて列の一部のサブセットにアクセスできるようにすることでした。しかし、hdfカラムの長さの制限が私に当たって、再びデータのチャンクを開始し、カラムのサブセットを再度ピックしました。 – oxymoron
'x'と' y'だけを使用し、 'z'を使わない場合、daskは計算から' z'を削除します。しかし、一度それらをすべてデータフレームに割り当てると、それらのすべてが詰まってしまいます。 Daskは、あなたが望むような高度な最適化を実行しません。あなたは、HDF5の代わりにパーケットに固執しようとするかもしれません。また、HDF5よりもいくつかの列を読む方がはるかに高速になるでしょう – MRocklin
ありがとう、寄木細工 – oxymoron