Dask 计算速度很慢

Nen*_* M. 4 python performance python-3.x dask dask-distributed

我有一个包含 500 万条记录的数据框。我试图通过利用 python 中的 dask 数据帧使用下面的代码来处理它

 import dask.dataframe as dd                                          
 dask_df = dd.read_csv(fullPath)
 ............
 for index , row in uniqueURLs.iterrows():
   print(index);
   results = dask_df[dask_df['URL'] == row['URL']]
   count = results.size.compute();
Run Code Online (Sandbox Code Playgroud)

但我注意到 dask 在过滤数据帧方面非常有效,但不是在 .compute() 中。因此,如果我删除了计算结果大小的行,我的程序就会变得非常快。有人可以解释一下吗?我怎样才能让它更快?

jpp*_*jpp 5

但我注意到 dask 在过滤数据帧方面非常有效,但不是在 .compute() 中。

你误解了dask.dataframe工作原理。该行不对数据集results = dask_df[dask_df['URL'] == row['URL']]执行计算。它仅存储有关可以在稍后触发的计算的指令。

所有计算仅适用于行count = results.size.compute()。这完全在意料之中,因为dask工作缓慢。

想想一个生成器和一个list可以耗尽生成器的函数。生成器本身是惰性的,但在被函数调用时会触发操作。dask.dataframe也是懒惰的,但通过形成顺序操作的内部“链”来巧妙地工作。

您应该从文档中查看懒惰和计算以获取更多信息。