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() 中。因此,如果我删除了计算结果大小的行,我的程序就会变得非常快。有人可以解释一下吗?我怎样才能让它更快?
但我注意到 dask 在过滤数据帧方面非常有效,但不是在 .compute() 中。
你误解了dask.dataframe工作原理。该行不对数据集results = dask_df[dask_df['URL'] == row['URL']]执行计算。它仅存储有关可以在稍后触发的计算的指令。
所有计算仅适用于行count = results.size.compute()。这完全在意料之中,因为dask工作缓慢。
想想一个生成器和一个list可以耗尽生成器的函数。生成器本身是惰性的,但在被函数调用时会触发操作。dask.dataframe也是懒惰的,但通过形成顺序操作的内部“链”来巧妙地工作。
您应该从文档中查看懒惰和计算以获取更多信息。
| 归档时间: |
|
| 查看次数: |
3205 次 |
| 最近记录: |