SparkCore 之 Spark Action 类算子详解
摘要系统拆解 Spark 全部 Action 算子——按输出类、存储类、聚合类、统计类四大分类逐个剖析语法、底层原理、Driver/Executor 数据流向和性能陷阱。配有 2 张原创架构图、完整 Scala 代码示例和常见 OOM 排查指南。面向 Java、大数据及 AI 开发工程师。一、Action vs Transformation — 本质区别Action行动算子是 Spark 中触发计算的唯一入口。所有 Transformation 只构建 DAGAction 才是真正按下执行按钮的那个操作。维度TransformationAction返回值新 RDD非 RDD值/数组/写入存储触发计算❌ 不触发✅ 触发 DAG 执行DAGScheduler不参与触发 Stage 划分 Task 提交执行时机惰性求值立即触发代表map / filter / joincount / collect / saveAsTextFile二、输出类 Action — 将数据拉回 Driver2.1 collect — 收集全部数据到 Driver// 签名def collect(): Array[T]// ⚠️ 所有数据通过网络传输到 Driver 内存// 数据量大时 → Driver OOMvalrddsc.parallelize(1to1000)rdd.collect()// Array[Int](1,2,...,1000) — 全部在Driver内存中// ❌ 危险用法PB 级数据 collectsc.textFile(hdfs://100TB-logs/).collect()// Driver OOM 必现// ✅ 正确用法数据量小几MB时才用 collectrdd.filter(_.contains(specific_keyword)).collect()// 过滤后数据量小2.2 take — 取前 N 条// 签名def take(num: Int): Array[T]// 只拉指定数量到 Driver不会 OOMrdd.take(10)// 前10条rdd.take(100)// 前100条// take 的底层执行// 先取第一个 Partition → 不够再取第二个 → 直到凑满 num 条// 性能优于 collect尤其数据量大时2.3 foreach / foreachPartition — 遍历执行不返回Driver// foreachPartition: 每个分区执行一次推荐rdd.foreachPartition{itervalconnDriverManager.getConnection(url)// 每个分区创建1次连接iter.foreach{recordconn.execute(sINSERT INTO t VALUES ($record))}conn.close()}// mapPartitions foreachPartition 组合是写入外部系统的最优模式三、存储类 Action — 将数据写入外部存储3.1 saveAsTextFile — 写入文本文件// 签名def saveAsTextFile(path: String)// 每个 Partition 写入一个文件part-00000, part-00001, ...rdd.saveAsTextFile(hdfs://output/result/)// ⚠️ 目标目录不能已存在否则抛异常// 解决方案先删除目录valpathnewPath(hdfs://output/result/)path.getFileSystem(sc.hadoopConfiguration).delete(path,true)rdd.saveAsTextFile(hdfs://output/result/)四、聚合类 Action — 在 Executor 聚合后返回 Driver4.1 reduce — 全局聚合// 签名def reduce(f: (T, T) T): T// 先在每个分区内聚合 → Shuffle → 最终聚合 → 返回Drivervalrddsc.parallelize(1to100)rdd.reduce(__)// 5050rdd.reduce(_ max _)// 100// ⚠️ reduce 要求函数满足结合律和交换律4.2 aggregate — 灵活的分区内/区间聚合// 求平均值valrddsc.parallelize(1to100)val(sum,count)rdd.aggregate((0,0))(seqOp{case((s,c),v)(sv,c1)},combOp{case((s1,c1),(s2,c2))(s1s2,c1c2)})valavgsum.toDouble/count// 50.54.3 treeAggregate / treeReduce — 树形聚合推荐// 树形聚合避免单点 OOMrdd.treeReduce(__,depth3)// 推荐用于大数据集rdd.treeAggregate(zero)(seqOp,combOp,depth3)五、统计类 Action — 便捷统计函数rdd.count()// 计数rdd.countByKey()// 按Key统计 → Map[K, Long] (⚠️ OOM)rdd.max()// 最大值rdd.min()// 最小值rdd.sum()// 求和rdd.histogram(10)// 直方图rdd.toDebugString// 查看Lineage六、Action 算子速查表算子分类返回数据流向OOM 风险collect()输出Array[T]→Driver⚠️ 高take(n)输出Array[T]→Driver✅ 低foreachPartition输出Unit→Executor✅ 无saveAsTextFile存储Unit→磁盘✅ 无reduce(f)聚合T→Driver✅ 低aggregate聚合U→Driver✅ 低treeReduce聚合T→Driver✅ 极低count()统计Long→Driver✅ 极低countByKey()统计Map→Driver⚠️ 高七、常见 Action 陷阱与排查陷阱现象解决collect OOMOutOfMemoryErrortake(n)替代countByKey OOMDriver GC overheadreduceByKey(__).collect()foreach 打印不显示输出在Executor日志collect().foreach(println)saveAsTextFile 目录已存在FileAlreadyExistsException先删除目录写在最后Action 算子虽然数量不多约 20 个但理解它们的数据流向和内存压力至关重要collect/countByKey → Driver数据向 Driver 汇聚 → 控制数据量foreach/saveAsTextFile → Executor/存储数据向外发散 → 无内存压力reduce/aggregate → 聚合后返回Executor 间聚合 → 关注 Shuffle选对 Action不仅决定性能更决定你的 Driver 会不会 OOM。

相关新闻

使用Codex本地代理快速接入DeepSeek大模型:免注册验证的AI开发方案

使用Codex本地代理快速接入DeepSeek大模型:免注册验证的AI开发方案

在实际开发和学习过程中,我们常常需要快速调用不同的大语言模型(LLM)来辅助编程、解答问题或进行对话。然而,直接使用官方API往往面临注册、充值、网络限制以及模型切换不便等问题。Codex作为一个开源的、可扩展的模型接入器&…

2026/8/5 11:17:06 阅读更多 →
TongHttpServer的安装与简单使用

TongHttpServer的安装与简单使用

THS安装与简单使用 首先准备好安装包跟授权 解压 各种安装包命令 tar.gz包:tar -zxvf 安装包名称 rpm包: rpm -ivh 安装包名称 deb包: dpkg -i 安保组名称 windows直接右键解压就行(zip) 查看解压后的目录 将授…

2026/8/5 11:17:06 阅读更多 →
笔记本显卡驱动缺失症状与2026年修复全指南

笔记本显卡驱动缺失症状与2026年修复全指南

1. 笔记本显卡驱动缺失的典型症状与影响当笔记本显卡驱动缺失或损坏时,用户通常会遇到以下三类典型症状:显示异常类问题:屏幕分辨率锁定在1024x768等低分辨率且无法调整外接显示器无信号输出或频繁闪屏桌面窗口出现撕裂、残影等渲染错误性能受…

2026/8/5 11:17:06 阅读更多 →

最新新闻

Interpretable Ransomware Detection Using Hybrid Large Language Models: A Comparative Analysis of ...

Interpretable Ransomware Detection Using Hybrid Large Language Models: A Comparative Analysis of ...

一、文章主要内容总结 该研究聚焦勒索软件的可解释性检测,提出了一种融合大型语言模型(LLM)与可解释人工智能(XAI)的混合框架。核心工作如下: 数据处理:采用UGRansome(网络行为数据)和Process Memory(PM,主机内存行为数据)两个结构化数据集,通过填充缺失值、KBin…

2026/8/5 12:56:44 阅读更多 →
5分钟免费获取B站视频完整数据:Python爬虫终极指南

5分钟免费获取B站视频完整数据:Python爬虫终极指南

5分钟免费获取B站视频完整数据:Python爬虫终极指南 【免费下载链接】Bilivideoinfo Bilibili视频数据爬虫 精确爬取完整的b站视频数据,包括标题、up主、up主id、精确播放数、历史累计弹幕数、点赞数、投硬币枚数、收藏人数、转发人数、发布时间、视频时长…

2026/8/5 12:56:44 阅读更多 →
Obsidian Encrypt:如何用本地加密插件保护你的私密笔记?

Obsidian Encrypt:如何用本地加密插件保护你的私密笔记?

Obsidian Encrypt:如何用本地加密插件保护你的私密笔记? 【免费下载链接】obsidian-encrypt Hide secrets in your Obsidian.md vault 项目地址: https://gitcode.com/gh_mirrors/ob/obsidian-encrypt 在数字笔记时代,隐私安全成为许多…

2026/8/5 12:56:44 阅读更多 →
C++性能优化实战:从内存访问到编译器优化的卡常技巧

C++性能优化实战:从内存访问到编译器优化的卡常技巧

1. 从“暴力过不了”到“压线AC”:为什么我们需要卡常 在算法竞赛或者一些对性能要求极高的C开发场景里,你肯定遇到过这种情况:逻辑完全正确,样例全部通过,复杂度分析也在理论允许范围内,但一提交就是“Tim…

2026/8/5 12:56:44 阅读更多 →
经办人离职后合同找不到?企业合同交接该这样管

经办人离职后合同找不到?企业合同交接该这样管

人走了,合同也跟着"失踪" 采购主管离职,交接清单写了三页,唯独没提他手上那几份还在履行的框架协议。半年后供应商上门要求按约定调价,接手的同事翻遍共享盘和档案柜,只找到一份没有签字页的扫描件。谈判从有…

2026/8/5 12:56:44 阅读更多 →
Redis哨兵机制:高可用架构与实战调优指南

Redis哨兵机制:高可用架构与实战调优指南

1. Redis哨兵机制深度解析 Redis哨兵(Sentinel)是Redis官方提供的高可用性解决方案,专门用于监控主从架构中的Redis实例状态,并在主节点故障时自动完成故障转移。我在实际生产环境中部署过多次哨兵集群,发现很多开发者…

2026/8/5 12:55:44 阅读更多 →

日新闻

Java缓存框架:JetCache

Java缓存框架:JetCache

TOC 一、简介 JetCache 是一个 Java 缓存抽象框架,为不同的缓存解决方案提供了统一的使用方式。 它提供的注解比 Spring Cache 更加强大。 JetCache 的注解支持原生 TTL、两级缓存以及在分布式环境中的自动刷新功能,同时你也可以通过代码直接操作 Cach…

2026/8/5 0:00:43 阅读更多 →
AD 铺铜设置十字连接,过孔全连接,新版AD的简单设置

AD 铺铜设置十字连接,过孔全连接,新版AD的简单设置

需求:通孔焊盘 十字花;过孔 Via 实心直连;贴片焊盘按需设置 AD 测试版本AD24 很多工程师踩坑:全部统一十字,导致接地过孔阻抗高、大电流发热! 一、快捷键打开规则 PCB 界面按下:D R 展开…

2026/8/5 0:00:43 阅读更多 →
AI素描转换技术深度拆解(2024最新论文+工业级落地代码):从Stable Diffusion ControlNet到LoRA微调全链路解析

AI素描转换技术深度拆解(2024最新论文+工业级落地代码):从Stable Diffusion ControlNet到LoRA微调全链路解析

更多请点击: https://kaifayun.com 第一章:AI生成素描效果 AI生成素描效果是计算机视觉与风格迁移技术融合的典型应用,其核心在于将彩色照片或RGB图像转换为具有手绘质感、明暗对比强烈、边缘清晰的单色素描图像。该过程通常依赖于深度学习模…

2026/8/5 0:00:43 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/4 13:24:41 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/4 11:41:39 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/5 10:20:36 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/4 13:38:24 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/4 11:09:16 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/4 13:38:40 阅读更多 →