Python 中的 Dask 简介

pythonserver side programmingprogramming

由于数据呈指数级增长,拥有能够管理大规模数据处理的工具变得越来越重要。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 执行可扩展的机器学习。


相关文章