我有一个包含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()中。因此,如果我删除了计算结果大小的行,我的程序将变得非常快。有人可以解释吗?我怎样才能更快?
答案 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。