Dask 数据帧中 "compute()" 背后的逻辑是什么?
What is the logic behind "compute()" in Dask dataframes?
我很难理解何时以及何时不在 Dask 数据帧中使用 compute()
。我通常按 adding/removing compute()
编写我的代码,直到代码运行为止,但这非常容易出错。我应该如何在 Dask 中使用 compute()
? Dast Distributed 有什么不同吗?
延迟计算的核心思想是延迟实际计算,直到知道最终目标。这允许:
- 提高编码速度(例如,作为数据科学家,我不需要在设计工作流之前等待每个转换步骤完成),
- 在多个工人之间分配工作,
- 克服我客户的资源限制,例如如果我使用的是内存有限的笔记本电脑,我可以 运行 在云中的 dask worker 或具有更多资源的另一台机器上进行大量计算,
- 如果最终目标只需要完成一些任务,效率会更高(例如,如果最终计算只需要数据帧的一个子集,那么 dask 将只加载相关的 columns/partitions)。
调用 .compute
的一些替代方法是:
.visualize()
:这有助于可视化任务图。当有很多任务时,DAG 可能会变得多毛,因此这对于 运行 较小的数据子集(例如仅加载数据帧的 two/three 分区) 很有用
- using
client.submit
:这会立即启动计算,为您提供一个 future
,一个引用正在计算的任务结果的对象。这提供了跨多个工作人员扩展工作的优势,但它可能会占用更多资源(因为 dask 不知道完整的工作流程,它可能 运行 不需要实现最终目标的计算)。
关于 distributed
,我认为除了结果的位置之外没有区别:dask.compute
会将结果放在本地机器上,而 client.compute
会将结果保存在远程工作人员身上。
Dask DataFrame 中的每个分区都是一个 Pandas DataFrame。
compute()
将所有分区(Pandas DataFrame)组合成一个 Pandas DataFrame。
Dask 速度很快,因为它可以并行地对分区执行计算。 Pandas 可能会更慢,因为它只适用于一个分区。
您应该尽可能避免调用 compute()
。最好将数据分散在多个分区中,这样可以并行处理。
在极少数情况下,您可以计算到 Pandas(例如,在进行从大到小的连接时或在进行大量过滤操作之后),但最好学习如何使用 Dask API 来运行 并行计算。
我很难理解何时以及何时不在 Dask 数据帧中使用 compute()
。我通常按 adding/removing compute()
编写我的代码,直到代码运行为止,但这非常容易出错。我应该如何在 Dask 中使用 compute()
? Dast Distributed 有什么不同吗?
延迟计算的核心思想是延迟实际计算,直到知道最终目标。这允许:
- 提高编码速度(例如,作为数据科学家,我不需要在设计工作流之前等待每个转换步骤完成),
- 在多个工人之间分配工作,
- 克服我客户的资源限制,例如如果我使用的是内存有限的笔记本电脑,我可以 运行 在云中的 dask worker 或具有更多资源的另一台机器上进行大量计算,
- 如果最终目标只需要完成一些任务,效率会更高(例如,如果最终计算只需要数据帧的一个子集,那么 dask 将只加载相关的 columns/partitions)。
调用 .compute
的一些替代方法是:
.visualize()
:这有助于可视化任务图。当有很多任务时,DAG 可能会变得多毛,因此这对于 运行 较小的数据子集(例如仅加载数据帧的 two/three 分区) 很有用
- using
client.submit
:这会立即启动计算,为您提供一个future
,一个引用正在计算的任务结果的对象。这提供了跨多个工作人员扩展工作的优势,但它可能会占用更多资源(因为 dask 不知道完整的工作流程,它可能 运行 不需要实现最终目标的计算)。
关于 distributed
,我认为除了结果的位置之外没有区别:dask.compute
会将结果放在本地机器上,而 client.compute
会将结果保存在远程工作人员身上。
Dask DataFrame 中的每个分区都是一个 Pandas DataFrame。
compute()
将所有分区(Pandas DataFrame)组合成一个 Pandas DataFrame。
Dask 速度很快,因为它可以并行地对分区执行计算。 Pandas 可能会更慢,因为它只适用于一个分区。
您应该尽可能避免调用 compute()
。最好将数据分散在多个分区中,这样可以并行处理。
在极少数情况下,您可以计算到 Pandas(例如,在进行从大到小的连接时或在进行大量过滤操作之后),但最好学习如何使用 Dask API 来运行 并行计算。