pandas 35000行を超えるシリーズがあります。daskを使用してより効率的にしたいのですが、daskコードとpandasコードの両方を使用しています同じ時間がかかっています。最初は "ser"はpandas series and fun1およびfun2は、シリーズの個々の行でパターン一致を実行する基本的な関数です。
パンダser = ser.apply(fun1).apply(fun2)
Daskser = dd.from_pandas(ser, npartitions = 16) ser = ser.apply(fun1).apply(fun2)
CPUのコアのステータスを確認したところ、すべてのコアが使用されているわけではありませんでした。 1つのコアのみが100%に慣れていました。
Daskを使用してシリーズコードを高速化したり、Dask操作を連続して実行しながらCPUのすべてのコアを利用したりする方法はありますか?
参照 http://dask.pydata.org/en/latest/scheduler-overview.html
呼び出している関数は純粋なpythonである可能性が高いため、GILを要求します。これは、スレッド内で一度に1つのpython命令のみが実行されることを保証するロックです。この場合、並列処理を確認するには、別のプロセスで関数を実行する必要があります。これは、マルチプロセススケジューラを使用して実行できます。
ser = ser.apply(fun1).apply(fun2).compute(scheduler='processes')
または、分散スケジューラを使用します(単一のマシンで正常に動作し、実際にはステータスダッシュボードなどの次世代のメリットがいくつかあります)。最も単純なデフォルトのケースでは、クライアントを作成するだけで十分です。
client = dask.distributed.Client()
しかし、あなたは読むべきです ドキュメント