Python 中的 Dask 简介
由于数据呈指数级增长,拥有能够管理大规模数据处理的工具变得越来越重要。Dask 就是这样一种工具,它是一种用于 Python 分析计算的多功能并行计算框架。本文将为您提供 Dask 的全面介绍以及有用的示例,以帮助您入门。
什么是 Dask?
Dask 是一个适应性强的 Python 并行计算框架,可以轻松创建用户友好的工作流程,用于提取、过滤和分析庞大的数据集。它擅长处理无法装入内存的海量数据集,并与 NumPy、Pandas 和 Scikit-Learn 等知名 Python API 无缝集成。
开始使用 Dask
Python 的软件包安装程序 Pip 可用于安装 Dask−
pip install dask
使用 Dask 进行大规模计算
现在让我们看看如何使用 Dask 进行大规模计算。
示例 1:使用 Dask 数组
使用阻塞算法,Dask Array 实现了 NumPy ndarray 接口的一部分。以下是如何构建 Dask Array 并使用它运行计算 −
import dask.array as da x = da.random.random((10000, 10000), chunks=(1000, 1000)) y = x + x.T z = y[::2, 5000:].mean(axis=1) z.compute()
本例中的计算是使用 compute() 函数进行的。 Dask 将数组分成块并分别处理每个块,从而充分利用可用的 RAM。
示例 2:使用 Dask DataFrame
Dask DataFrame 是一个相当大的并行 DataFrame,由沿索引分隔的较小的 Pandas DataFrame 组成;下面是对 Dask DataFrame 进行操作的示例−
import dask.dataframe as dd df = dd.demo.make_timeseries('2000', '2001', freq='1d', dtypes={'A': float, 'B': int}) result = df.groupby(df.index.month).mean() result.compute()
在此示例中,使用时间序列 DataFrame 计算每个月的列平均值。 Dask DataFrame 操作是延迟评估的,并且使用 compute() 启动计算,就像 Dask Array 一样。
示例 3:使用 Dask Delayed
并行化现有代码的一种快速有效的方法是 Dask Delayed。它使用户能够将函数评估推迟到并发作业中。以下是一个例子 −
from dask import delayed @delayed def increment(x): return x + 1 @delayed def add(x, y): return x + y x = increment(15) y = increment(30) z = add(x, y) z.compute()
本例中的延迟装饰器包装了 add 和increment 函数,使它们成为惰性函数。使用 calculate() 开始实际计算。
示例 4:使用 Dask Bag 处理非结构化数据
在将数据转换为 Dask 数组或数据框之前,最好使用 Dask Bag(也称为 dask.bag 或 db)进行数据准备。文本数据、日志文件和 JSON 记录是 Dask Bag 有效处理的非结构化或半结构化数据的示例。
import dask.bag as db data = db.from_sequence(['Alice', 'Bob', 'Charlie', 'Dennis', 'Edith', 'Frank'], npartitions=3) result = data.map(lambda x: (x, len(x))) result.compute()
示例 5:使用 Dask ML 进行可扩展机器学习
Dask ML 在 Python 中提供可扩展机器学习,利用 Dask 以及 Scikit-Learn 等知名机器学习框架。
from dask_ml.cluster import KMeans import dask.array as da X = da.random.random((10000, 50), chunks=(1000, 50)) clf = KMeans(n_clusters=5) clf.fit(X)
在此示例中,我们使用 Dask Array 使用 Dask ML 中的 KMeans 聚类算法创建一个相当大的数据集。
结论
Dask 是用于大规模计算的顶级选项,是一个开源 Python 库。它旨在与已安装的 Python 库(如 NumPy、Pandas 和 Scikit-Learn)顺利配合使用。在大数据时代,它为多核处理和分布式计算提供了可扩展的解决方案。
在本介绍中,我们研究了 Dask 的许多功能,包括其安装、数据结构和在 Python 编程中的使用。给出的示例展示了 Dask 的功能,包括处理大量 Dask 数组、对 Dask 数据帧进行并行化操作、利用 Dask 延迟进行惰性求值、使用 Dask bag 处理非结构化数据以及使用 Dask ML 执行可扩展的机器学习。