Jon*_*han 7 python dask data-science dask-distributed
我试图了解 Dask 在本地计算机上的使用模式。
具体来说,
Pandas 通过单个核心执行这些操作,这些操作对我来说需要几个小时。我的机器上有 8 个核心,因此,我想使用 Dask 尽可能地并行化这些操作。
我的问题如下: Dask 中执行此操作的两种方式有什么区别:
import pandas as pd
from sklearn.datasets import load_iris
iris = load_iris()
Run Code Online (Sandbox Code Playgroud)
(1)
import dask.dataframe as dd
df = dd.from_pandas(
pd.DataFrame(iris.data, columns=iris.feature_names),
npartitions=2
)
df.mean().compute()
Run Code Online (Sandbox Code Playgroud)
(2)
import dask.dataframe as dd
from distributed import Client
client = Client()
df = client.persist(
dd.from_pandas(
pd.DataFrame(iris.data, columns=iris.feature_names),
npartitions=2
)
)
df.mean().compute()
Run Code Online (Sandbox Code Playgroud)
一种使用模式相对于另一种使用模式有什么好处?为什么我应该使用其中一种而不是另一种?
版本(2)与版本(1)相比有两个不同之处:选择使用分布式调度器,以及persist。这些是单独的因素。关于两者都有很多文档:https://distributed.readthedocs.io/en/latest/quickstart.html,http : //dask.pydata.org/en/latest/dataframe-performance.html#persist-intelligently,所以这个答案可以保持简短。
1)分布式调度器比以前的线程和多进程调度器更新、更智能。顾名思义,它既可以使用集群,也可以在单机上工作。尽管调用时的延迟.compute()通常较高,但在许多方面它更高效,具有更高级的功能(例如实时动态编程)和更多诊断(例如仪表板)。使用 创建时Client(),默认情况下会获得等于核心数量的进程数,但您可以选择进程和线程的数量,并接近原始的仅线程情况Client(processes=False)。
2)持久化意味着评估计算并将其存储在内存中,以便进一步的计算更快。您也可以在没有分布式客户端 ( dask.persist) 的情况下进行持久化。它有效地提供了以内存换取性能的方案,因为每次将其用于依赖于它的任何内容时,您无需重新评估计算。如果您继续对中间体仅执行一次计算(如示例中所示),那么它应该不会对性能产生影响。
| 归档时间: |
|
| 查看次数: |
2950 次 |
| 最近记录: |