【问题标题】:Dask compute is very slowDask 计算非常慢
【发布时间】:2018-10-07 11:00:28
【问题描述】:

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

【问题讨论】:

    标签: python python-3.x performance dask dask-distributed


    【解决方案1】:

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

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

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

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

    您应该查看文档中的Laziness and Computing 以了解更多信息。

    【讨论】:

      猜你喜欢
      • 2021-12-31
      • 1970-01-01
      • 2018-01-09
      • 1970-01-01
      • 1970-01-01
      • 2019-03-07
      • 1970-01-01
      • 2021-07-22
      • 2021-06-30
      相关资源
      最近更新 更多