我开始使用dask。为了我自己的理解(以及我想向其展示dask的同事),我想构建一个基本数据框,执行基本操作并将执行时间与仅使用pandas的实现进行比较。这是我非常简单的尝试:
import dask
import dask.multiprocessing
import dask.dataframe as dd
import pandas as pd
import time
dask.set_options(get=dask.multiprocessing.get)
start = time.time()
df = dd.from_pandas(pd.DataFrame(data={'a': list(range(10))}), npartitions=4)
df['a'].apply(lambda x: time.sleep(2))
end = time.time()
print(f'time elapsed: {end - start}')
我正在使用多处理调度程序,因为我希望在单独的shell中看到进程出现在ps aux | grep python
调用中。但是,我没有看到它们。是否 - 出于演示目的 - 列出了dask正在使用的所有进程的方法?
为了记录,我确实看到了经过时间的改善。 pandas实现(此处未显示)需要20秒,而dask版本需要4秒。但是,鉴于我使用了4个分区,我预计它会占用5个分区。
答案 0 :(得分:1)
如果您正在使用多处理调度程序,则Dask会在每次调用multiprocessing.Pool
时创建并销毁compute
。
对于演示,我通常使用distributed scheduler on a single machine,其中包括一个漂亮的仪表板,其中的页面显示了流程,活动等。
$ pip install dask[complete] bokeh
or
$ conda install dask bokeh
然后
from dask.distributed import Client
client = Client()
# navigate to http://localhost:8787/status