1. Dask 简介
-
是什么?
Dask 是一个灵活的并行计算库,用于在 Python 中处理超出内存限制的大型数据集。它模仿了 NumPy、Pandas 和 Scikit-learn 的 API,但支持分布式计算。 -
为什么使用?
-
处理比内存大的数据。
-
利用多核 CPU 或分布式集群加速计算。
-
无缝兼容现有的 Python 生态系统(如 Pandas、NumPy)。
-
2. 安装 Dask
# 安装核心库
pip install dask
# 安装分布式模块和额外依赖
pip install dask[distributed] # 分布式计算支持
pip install dask[dataframe] # DataFrame 支持
pip install dask-ml # 机器学习支持
3. Dask 核心组件
(1) Dask Array
-
用于处理大型多维数组(类似 NumPy)。
-
示例代码:
import dask.array as da # 创建一个大型数组(分块存储) x = da.random.random((10000, 10000), chunks=(1000, 1000)) # 分块为 1000x1000 y = x + x.T # 延迟计算,不会立即执行 result = y.mean() # 定义计算逻辑 # 触发实际计算 print(result.compute())
(2) Dask DataFrame
-
用于处理大型表格数据(类似 Pandas)。
-
示例代码:
import dask.dataframe as dd # 从 CSV 文件读取数据(分块加载) df = dd.read_csv('large_dataset.csv', blocksize=25e6) # 25MB 每块 result = df.groupby('category').price.mean().compute() # 分组聚合 print(result)
(3) Dask Bag
-
处理半结构化数据(如 JSON 文件、日志文件)。
-
示例代码:
import dask.bag as db # 读取 JSON 数据 bag = db.read_text('logs/*.json').map(json.loads) filtered = bag.filter(lambda x: x['value'] > 10).pluck('name') # 转换为列表 print(filtered.compute())
(4) Dask Delayed
-
并行化任意 Python 函数。
-
示例代码:
from dask import delayed @delayed def square(x): return x ** 2 @delayed def sum_list(lst): return sum(lst) # 创建延迟任务 tasks = [square(i) for i in range(10)] total = sum_list(tasks) # 并行执行 print(total.compute()) # 输出 285
4. 分布式计算
(1) 本地集群
from dask.distributed import Client
client = Client() # 启动本地集群
# 执行任务(自动分配资源)
result = some_dask_task.compute()
client.close()
(2) 分布式集群
-
启动调度器(终端):
dask-scheduler
-
启动多个工作节点(终端):
dask-worker <scheduler-ip>:<scheduler-port>
-
连接集群:
from dask.distributed import Client client = Client("<scheduler-address>")
5. 高级功能
(1) 数据持久化
-
将中间结果缓存到内存或磁盘:
df = df.persist() # 缓存到内存
(2) 性能优化
-
调整分块大小(
chunks
参数)。 -
使用任务图可视化工具:
result.visualize() # 生成任务依赖图
(3) 集成其他库
-
机器学习(
dask-ml
):from dask_ml.linear_model import LogisticRegression model = LogisticRegression() model.fit(X_train, y_train)
-
与 Pandas/NumPy 互转:
dask_array = da.from_array(numpy_array, chunks=100) pandas_df = dask_df.compute()
6. 资源推荐
-
教程案例:Dask Tutorial
通过以上步骤,你可以快速上手 Dask,高效处理大规模数据任务!遇到复杂问题时,记得利用 Dask 的任务可视化和分布式监控工具(如 Dashboard)进行调试。