最近、使いやすい Python 並列処理モジュールを目指したdaskモジュールを見つけました。私にとっての大きなセールスポイントは、パンダで動作することです。
マニュアルページを少し読んだ後、この簡単に並列化可能なタスクを実行する方法が見つかりません。
ts.apply(func) # for pandas series
df.apply(func, axis = 1) # for pandas DF row apply
現時点では、これをダスクで達成するために、AFAIK、
ddf.assign(A=lambda df: df.apply(func, axis=1)).compute() # dask DataFrame
これは醜い構文であり、実際には完全よりも遅いです
df.apply(func, axis = 1) # for pandas DF row apply
なにか提案を?
編集:マップ機能について@MRocklinに感謝します。普通のパンダが適用するよりも遅いようです。これは pandas GIL リリースの問題に関連していますか、それとも間違っていますか?
import dask.dataframe as dd
s = pd.Series([10000]*120)
ds = dd.from_pandas(s, npartitions = 3)
def slow_func(k):
A = np.random.normal(size = k) # k = 10000
s = 0
for a in A:
if a > 0:
s += 1
else:
s -= 1
return s
s.apply(slow_func) # 0.43 sec
ds.map(slow_func).compute() # 2.04 sec