我对如何从 dask 中获得最佳效果感到困惑。
问题
我有一个包含多个时间序列的数据框(每个都有自己的时间序列key
),我需要my_fun
在每个时间序列上运行一个函数。用 pandas 解决它的一种方法涉及
df = list(df.groupby("key"))
然后应用my_fun
多处理。尽管内存使用量很大,但性能在我的机器上相当不错,而在谷歌云计算上却很糟糕。
在 Dask 上,我当前的工作流程是:
import dask.dataframe as dd
from dask.multiprocessing import get
- 从 S3 读取数据。14 个文件 -> 14 个分区
- `df.groupby("key").apply(my_fun).to_frame.compute(get=get)
因为我没有设置索引df.known_divisions
是False
问题:
- 最好
df.npartitions
是倍数ncpu
还是没关系? 由此看来,将索引设置为键似乎更好。我的猜测是我可以做类似的事情
df["key2"] = df["key"] df = df.set_index("key2")
但是,同样,我不知道这是否是最好的方法。