《Python实战进阶》No14: 使用Dask处理大规模数据集

文章特色:

  1. 包含3个核心代码块,覆盖延迟计算、分块策略和云原生集成
  2. 4个架构图/监控面板示意图的占位说明
  3. 对比表格清晰展示技术选型差异
  4. 实战案例包含从数据读取到机器学习的完整流水线
  5. 扩展思考部分引入最新云原生技术实践
  • Dask 是一个灵活的开源库,适用于 Python 中的并行和分布式计算。

在这里插入图片描述

  • 什么是 Dask?
    Dask 是一个开源库,旨在为现有 Python 堆栈提供并行性。Dask 与 Python 库(如 NumPy 数组、Pandas DataFrame 和 scikit-learn)集成,无需学习新的库或语言,即可跨多个核心、处理器和计算机实现并行执行。

  • Dask 由两部分组成:

用于并行列表、数组和 DataFrame 的 API 集合,可原生扩展 Numpy、NumPy、Pandas 和 scikit-learn,以在大于内存环境或分布式环境中运行。 Dask 集合是底层库的并行集合(例如,Dask 数组由 Numpy 数组组成)并运行在任务调度程序之上。
一个任务调度程序,用于构建任务图形,协调、调度和监控针对跨 CPU 核心和计算机的交互式工作负载优化的任务。
用于构建任务图形的任务调度程序。

Dask 包含三个并行集合,即 DataFrame、Bag 和数组,每个均可自动使用在 RAM 和磁盘之间分区的数据,以及根据资源可用性分布在集群中多个节点之间的数据。对于可并行但不适合 Dask 数组或 DataFrame 等高级抽象的问题,有一个“延迟”函数使用 Python 装饰器修改函数,以便它们延迟运行。这意味着执行被延迟,并且函数及其参数被放置到任务图形中。

Dask 的任务调度程序可以扩展至拥有数千个节点的集群,其算法已在一些全球最大的超级计算机上进行测试。其任务调度界面可针对特定作业进行定制。Dask 可提供低用度、低延迟和极简的序列化,从而加快速度。

在分布式场景中,一个调度程序负责协调许多工作人员,将计算移动到正确的工作人员,以保持连续、无阻塞的对话。多个用户可能共享同一系统。此方法适用于 Hadoop HDFS 文件系统以及云对象存储(例如 Amazon 的 S3 存储)。

该单机调度程序针对大于内存的使用量进行了优化,并跨多个线程和处理器划分任务。它采用低用度方法,每个任务大约占用 50 微秒。

在这里插入图片描述

图1:Dask分布式计算架构示意图

核心概念

1. 延迟计算与任务图优化

Dask通过构建任务图(Task Graph)实现延迟计算(Lazy Evaluation),将计算分解为多个小任务并优化执行顺序。

import dask.array as da# 创建10亿元素的延迟数组
x = da.random.random((100000, 100000), chunks=(10000, 10000))
y = (x + 1)[::2, :].mean(axis=1)# 可视化任务图
y.visualize(filename='task_graph.png')

2. 分块策略对比

策略类型适用场景时间复杂度
Blockwise逐元素操作(如+1)O(n)
Tree Reduction聚合操作(如sum, mean)O(n log n)
# Blockwise示例
df = dd.read_csv('logs/*.csv')
filtered = df[df['status'] == 200]  # 逐块过滤# Tree Reduction示例
total = df.groupby('country')['bytes'].sum().compute()

3. 自定义Dask集合

from dask.base import tokenize
from dask.delayed import Delayedclass CustomCollection:def __init__(self, data):self.data = datadef __dask_graph__(self):return {tokenize(self): (lambda x: x**2, self.data)}def __dask_keys__(self):return [tokenize(self)]

4. 分布式诊断工具

启动Dashboard:

dask scheduler --dashboard-address :8787
dask worker tcp://scheduler:8786

主要监控面板:

  • 任务流(Task Stream):实时任务执行状态
  • 进度(Progress):整体计算进度条
  • 资源监控(Workers):CPU/内存使用率

实战案例

1. 10亿条日志实时聚合

import dask.dataframe as dd# 读取分布式日志文件
df = dd.read_json('s3://logs/2023-08-*.json.gz')# 实时聚合计算
result = (df[df['response_time'] > 1000].groupby('service').agg({'user_id': 'count', 'response_time': 'mean'}).compute()
)print(result.head())

2. Dask与Pandas/SKLearn协同

from dask_ml.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier# 转换为Pandas DataFrame
pdf = df.compute()# 使用Dask-ML进行分布式训练
X_train, X_test, y_train, y_test = train_test_split(df, ...)
clf = RandomForestClassifier()
clf.fit(X_train, y_train)

扩展思考

Dask vs Ray架构对比

特性DaskRay
调度模型中心化调度分布式调度
适用场景数据密集型计算机器学习/强化学习
内存管理显式分块自动对象存储
生态集成Pandas/NumPy原生支持Tune/Serve组件丰富

云原生资源调度

from dask_kubernetes import KubeCluster# 创建动态扩展集群
cluster = KubeCluster.from_yaml('worker-spec.yaml')
cluster.adapt(minimum=2, maximum=20)# 使用Coiled进行云资源管理
import coiled
cluster = coiled.Cluster(n_workers=10,region='us-east-1',tags={'project': 'data-pipeline'}
)

总结

Dask通过其独特的延迟计算和分布式任务调度机制,为Python生态提供了处理TB级数据的能力。结合云原生技术,可构建弹性伸缩的数据处理流水线。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/29494.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

React + React-intl @3.xx + TypeScript

声明:此篇文章使用的版本是 "react-intl": "^3.12.0"。 因为react-intl3.xx版本相较于react-intl2.xx版本差别较大,有些API是break change, 所以这篇文章的实现方式,不适用于react-intl2.xx版本。 一: 安装react-intl np…

TON基金会确认冠名赞助2025香港Web3嘉年华,并将于4月8日重磅呈现“TON生态日”

近日,由万向区块链实验室与HashKey Group联合推出的Web3年度盛典——2025香港Web3嘉年华正式宣布,TON基金会确认成为本届嘉年华的冠名赞助商,并将于4月8日在主会场特别举办“TON生态日”专题Side Event,集中展现TON生态的最新技术…

IDEA 基础配置: maven配置 | 服务窗口配置

文章目录 IDEA版本与MAVEN版本对应关系maven配置镜像源插件idea打开服务工具窗口IDEA中的一些常见问题及其解决方案IDEA版本与MAVEN版本对应关系 查找发布时间在IDEA版本之前的dea2021可以使用maven3.8以及以前的版本 比如我是idea2021.2.2 ,需要将 maven 退到 apache-maven-3.…

Mybatis详解-上

目录 Mybatis概述 快速入门 引入依赖 配置数据库参数 持久层代码 基本介绍 一个参数变量 多个参数变量 新增 将自增主键id赋值到userinfo对象里 参数重命名 删除 修改 查询 sql语句重命名的方法查询 指定结果映射关系 复用结果映射关系 驼峰转换 MyBatis的XM…

【PSIM】峰值电流如何用D类触发器

最近做实验发现很多人用D类触发器代替RS触发器进行峰值电流控制。研究了一下发现确实效果更好(模电数电还给老师了。。) 这篇文章研究一下PSIM中D类触发器的使用,以及如何实现峰值电流控制 选用的是带设置重置的D触发器,见下图 …

项目设计之用户注册与登录

流程 表设计 create table if not exists kanyuServer.user_db (id bigint unsigned auto_increment comment 主键primary key,phone varchar(11) not null comment 手机号码,password varchar(128) default null comment 密码,加密存储,user_name varchar(32) de…

贪吃蛇身匀速运动模型

通用运动模型 我们已知斜线为移动的距离 d d d, x x x轴总偏移量为 d x dx dx, y y y轴总偏移量为 d y dy dy,在一帧当中,我们也知道能走的距离为 m d md md。那么作为一般的运动模型,该如何确定我们进行移动的方向呢&…

项目管理工具 Maven

目录 1.Maven的概念 1.1​​​​​什么是Maven 1.2什么是依赖管理 1.3什么是项目构建 1.4Maven的应用场景 1.5为什么使用Maven 1.6Maven模型 2.初识Maven 2.1Maven安装 2.1.1安装准备 2.1.2Maven安装目录分析 2.1.3Maven的环境变量 2.2Maven的第一个项目 2.2.1按照约…

SSM架构 +Nginx+FFmpeg实现rtsp流转hls流,在前端html上实现视频播放

序言: 本文介绍通过SSM架构 NginxFFmpeg实现rtsp流转hls流,在前端html上实现视频播放功能。此方法可用于网络摄像头RTSP视频流WEB端实时播放。(海康和大华都可以),我使用的是海康 步骤一:安装软件 FFmpeg…

超链接打开新页签传递参数

背景 有一个需求,网站1点击按钮后跳转到页面2,页面1和页面2的域名不同,并且需要传递参数A,再 那么最简单的就是 在url上带参数A 比如 https://xx.com?Axxx ,从url上的queryParam上就能获取参数 但很可惜&#xff0c…

【入门级篇】保姆级教程:零基础实现DeepSeek本地部署的两种终极方案(附避坑指南)

关于DeepSeek的革命性冲击的看法 大家好,前阵子在忙着DeepSeek的一些本地化部署和一些开发工具,工作流的工作,最近刚好有空,借助零散时间给大家分享下DeepSeek的一些应用,为此我写了一篇专栏,从浅入深的介绍DeepSeek的一些技术,应用,以及DeepSeek的论文分析。 首先我们…

nginx简单命令启动,关闭等

启动命令 #启动nginx start nginx重启命令 比如修改了配置文件,用这个命令重启生效 #重启nginx nginx -s reload3,查看端口占用 #查看端口占用 netstat -aon4,关闭nginx 如果使用cmd命令窗口启动nginx, 关闭cmd窗口是不能…

强化学习(赵世钰版)-学习笔记(2.状态值与贝尔曼方程)

这是本课程的第二章,讲述状态值与贝尔曼(Bellman)方程的相关概念。 回报值(Return)的重要性:计算回报值可以用于评估各策略的优劣,可以量化分析。 回报值的计算方法:设Vi为某策略下起…

STM32——定时器

定时器有 捕获脉冲宽度、计算PWM占空比、输出PWM波形以及编码器计数等各种功能。 定时器又能分为 基本定时器:TIM6和TIM7通用定时器:TIM2、TIM3、TIM4和TIM5高级定时器:TIM1、TIM8 一、计数和分频 每当一个方波信号的上升沿经过寄存器&…

链表双指针经典习题

链表双指针经典习题 链表的分解删除排序链表中的重复元素2(重复元素彻底删除)方法一:分解链表方式二:快慢指针递归解法 链表的合并丑数2有序矩阵中第k小的元素查找和最小的k对数字两数相加两数相加2 回文单链表回文链表 迭代和递归…

2025年主流原型工具测评:墨刀、Axure、Figma、Sketch

2025年主流原型工具测评:墨刀、Axure、Figma、Sketch 要说2025年国内产品经理使用的主流原型设计工具,当然是墨刀、Axure、Figma和Sketch了,但是很多刚入行的产品经理不了解自己适合哪些工具,本文将从核心优势、局限短板、协作能…

RISC-V双核锁步高性能抗辐照MCU芯片技术解析与应用

1. 概念名词解析 安全冗余设计 AS32X601系列通过硬件ECC(Error Correction Code)保护存储系统(内置SRAM、Flash等),并在DMA模块中提供“可选的双核锁步安全备份”机制,支持高可靠性场景下的数据传输容错。…

2024爱分析·央国企数字化应用实践报告

报告综述“央国企KPI”驱动央国企数字化投入稳中有进 在民营企业推进数字化转型的过程中,其核心驱动力往往聚焦于降本增效与开源节流。然而,对于央国企而言,尽管降本增效等因素亦在其考量范围之内,但其推进数字化转型的根本动因则…

Kubernetes 的正式安装

1.基础的网络结构说明 软件路由器 ikuai 当然同一个仅主机模式 相当于在 同一个我们所谓的广播域内 所以相当于它们的几张网卡 是被连接起来的 为了防止出现问题 我们可以把第二块网卡临时关闭一下 2.准备路由器 ikuai 爱快 iKuai-商业场景网络解决方案提供商 (ikuai8.com)…

OpenCV计算摄影学(18)平滑图像中的纹理区域同时保留边缘信息函数textureFlattening()

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::textureFlattening 是 OpenCV 中用于图像处理的一个函数,旨在平滑图像中的纹理区域,同时保留边缘信息。该技术特别适…