运算速度很慢

时间:2018-10-07 11:00:29

标签: python 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();

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

1 个答案:

答案 0 :(得分:2)

  

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

您误解了dask.dataframe的工作方式。第results = dask_df[dask_df['URL'] == row['URL']]行在数据集上执行不计算。它仅存储有关可在以后触发的计算的指令。

所有计算仅适用于行count = results.size.compute()。这是完全可以预期的,因为dask的工作很懒。

请考虑一个生成器以及可以耗尽生成器的诸如list之类的功能。生成器本身是惰性的,但是当被函数调用时将触发操作。 dask.dataframe也是懒惰的,但是通过形成顺序操作的内部“链”来巧妙地工作。

有关更多信息,您应该从文档中看到Laziness and Computing