例えば、以下のようにグループ毎に集計する処理の場合
sums: DataFrame = train.groupby(ids)[SALES_COUNT].sum()
以下のようにするとグループ単位で並列化できるので速くなりそうに思える。
def func(df): return df[SALES_COUNT].sum() ret_list: List = Parallel(n_jobs=cpu_count, backend="threading")(delayed(func)(group) for name, group in df.groupby(group_id))
が、実際計測してみると並列化しない場合は60秒、並列化した場合が3300秒と60倍近く並列化しない方が速かった。 想像だが、原因は以下かも。。
- pythonの並列処理はマルチプロセスであり、各プロセスにデータのコピーを配るので余計時間がかかった
- 並列化後のコードはapplyのようにグループ毎に関数を実行していくのでapplyが遅いのと同じ理由で遅くなったのかも
本当のところは分からないが、こんなに差が付くとは。。pythonムズカシイ