Spark基础篇 RDD、DataFrame与DataSet的关系、适用场景与演进趋势
一、核心概念与演进背景
1.1 RDD(弹性分布式数据集)
- 定义:RDD 是 Spark 最早的核心抽象(1.0版本引入),代表不可变、分区的分布式对象集合,支持函数式编程和容错机制。
- 特点:
- 无结构化信息:仅存储对象本身,无法自动感知数据内部结构(如字段名、类型)。
- 编译时类型安全:通过泛型支持静态类型检查(如
RDD[Person])。 - 高灵活性:支持任意可序列化对象,适用于非结构化数据处理。
1.2 DataFrame
- 定义:DataFrame 是 Spark 1.3 引入的结构化抽象,本质是
Dataset[Row],以命名列形式组织数据,类似关系型数据库表。 - 特点:
- 结构化 Schema:显式定义列名和类型(如
name:String, age:Int),支持 SQL 查询和优化。 - 执行优化:通过 Catalyst 优化器自动生成高效执行计划(如谓词下推、列裁剪)。
- 内存管理:使用堆外存储和 Tungsten 二进制格式,减少 GC 开销。
- 结构化 Schema:显式定义列名和类型(如
1.3 Dataset
- 定义:Dataset 是 Spark 1.6 推出的强类型 API,结合 RDD 的类型安全与 DataFrame 的执行优化。
- 特点:
- 类型安全:编译时检查数据字段类型(如
Dataset[Person]),避免运行时错误。 - 统一接口:兼容 RDD 的操作函数(如
map)和 DataFrame 的 SQL 查询。 - 编码器优化:通过 Encoder 实现 JVM 对象与二进制格式的高效转换。
- 类型安全:编译时检查数据字段类型(如
二、关键差异对比
2.1 数据表示与结构
| 特性 | RDD | DataFrame | Dataset |
|---|---|---|---|
| 数据结构 | 无 Schema,泛型对象 | 有 Schema,Row 对象 | 有 Schema,强类型对象 |
| 类型安全 | 编译时安全 | 运行时检查 | 编译时安全 |
| 序列化 | Java 序列化(高开销) | Tungsten 二进制格式 | Encoder 优化格式 |
| 适用数据 | 结构化/非结构化 | 结构化/半结构化 | 结构化/半结构化 |
2.2 性能优化
- RDD:因频繁创建临时对象导致 GC 压力大,需手动优化分区和持久化策略。
- DataFrame/Dataset:
- Catalyst 优化器:自动优化逻辑计划(如过滤下推、聚合优化)。
- Tungsten 引擎:堆外内存管理和代码生成技术提升计算速度。
- 统计剪枝:利用数据统计信息跳过无关分区(如 Parquet 文件的最大值/最小值)。
2.3 API 与编程模型
- RDD:函数式编程(如
map,filter),适合复杂业务逻辑。 - DataFrame:声明式 SQL 语法(如
select("name").where("age>30")),适合结构化分析。 - Dataset:混合模式,支持 Lambda 函数与 SQL 表达式(如
ds.filter(p => p.age > 30))。
三、适用场景与选择建议
3.1 根据数据特征选择
3.1.1 结构化数据(JSON/CSV/Parquet等)
- 推荐抽象:DataFrame/Dataset
- 案例说明:
某电商平台需要分析用户行为日志(JSON格式),使用spark.read.json()创建DataFrame后,可直接通过SQL语法进行聚合查询(如计算每日UV)。DataFrame的自动模式发现特性可自动解析JSON结构,Catalyst优化器会对groupBy操作进行查询优化。
3.1.2 半结构化数据(日志文件/XML)
- 推荐抽象:RDD + DataFrame组合
- 案例说明:
处理服务器原始日志时,先用RDD进行初步清洗(如正则提取关键字段),再通过.toDF()转为DataFrame进行结构化分析。这种混合模式既能处理不规则数据,又能利用DataFrame的优化性能。
3.1.3 非结构化数据(文本流/二进制)
- 推荐抽象:RDD
- 案例说明:
图像处理任务中,使用sc.binaryFiles()读取图片文件生成RDD,通过自定义map函数实现像素矩阵转换。
相关文章:
Spark基础篇 RDD、DataFrame与DataSet的关系、适用场景与演进趋势
一、核心概念与演进背景 1.1 RDD(弹性分布式数据集) 定义:RDD 是 Spark 最早的核心抽象(1.0版本引入),代表不可变、分区的分布式对象集合,支持函数式编程和容错机制。特点: 无结构化信息:仅存储对象本身,无法自动感知数据内部结构(如字段名、类型)。编译时类型安全…...
odoo初始化数据库
在 Odoo 中,初始化数据库的命令会因使用的环境和启动方式而有所不同,下面为你详细介绍几种常见的初始化数据库的方式。 1. 使用命令行工具初始化 在命令行中,你可以使用 Odoo 的启动脚本并结合相关参数来初始化数据库。以下是基本的命令格式…...
大模型WebUI:Gradio全解12——LangChain原理、架构和组件(2)
大模型WebUI:Gradio全解12——LangChain原理、架构和组件(2) 前言12. LangChain原理及agents构建Gradio UI12.2 学习资料12.2.1 学习文档12.2.2 用途示例12.2.3 OpenAI和DeepSeek例程1. OpenAI示例2. DeepSeek例程参考文献前言 本系列文章主要介绍WEB界面工具Gradio。Gradi…...
1. 搭建前端+后端开发框架
1. 说明 本篇博客主要介绍网页开发中,搭建前端和后端开发框架的具体步骤,框架中所使用的技术栈如下: 前端:VUE Javascript 后端:Python Flask Mysql 其中MySQL主要用来存储需要的数据,在本文中搭建基本…...
初会学习记录
目录 务实: 第一章 (1)会计概念,职能和目标: (2)会计假设: (3)会计核算基础: (4)会计信息质量要求: (5)会计人员职业道德规范 (6)会计准则制度体系概述: (7)会计要素与会计等式&#x…...
DeepSeek 使用窍门与提示词写法指南
一、通用提示词技巧 窍门分类技巧说明示例提示词明确需求用“角色任务要求”明确目标作为健身教练,为30岁上班族设计一周减脂计划,需包含饮食和15分钟居家训练结构化提问分步骤、分模块提问第一步:列出Python爬虫必备的5个库;第二…...
【大模型】DeepSeek核心技术之MLA (Multi-head Latent Attention)
文章目录 1. Multi-Head Attention (MHA)2. Multi-head Latent Attention (MLA)2.1 低秩压缩2.2 应用RoPE2.3 矩阵融合 参考资料 在讲解MLA之前,需要大家对几个基础的概念(KV Cache, Grouped-Query Attention (GQA), Multi-Query Attention (…...
七、JOIN 语法详解与实战示例
一、JOIN 的作用与分类 JOIN 操作用于合并两个或多个表的行,基于表之间的关联字段。以下是常见的 JOIN 类型: JOIN 类型描述INNER JOIN返回两个表匹配的记录LEFT JOIN返回左表所有记录 右表匹配记录(右表无匹配则为NULL)RIGHT …...
Skynet入门(一)
概念 skynet 是一个为网络游戏服务器设计的轻量框架。但它本身并没有任何为网络游戏业务而特别设计的部分,所以尽可以把它用于其它领域。 设计初衷 如何充分利用它们并行运作数千个相互独立的业务。 模块设计建议 在 skynet 中,用服务 (service) 这…...
单片机栈和堆、FALSH、区别
1. Flash(闪存)(程序存储器) 用途 存储程序代码:编译后的机器指令(如 .text 段)、常量数据(如 .rodata 段)等。 掉电不丢失:程序固化在 Flash 中࿰…...
【FL0090】基于SSM和微信小程序的球馆预约系统
🧑💻博主介绍🧑💻 全网粉丝10W,CSDN全栈领域优质创作者,博客之星、掘金/知乎/b站/华为云/阿里云等平台优质作者、专注于Java、小程序/APP、python、大数据等技术领域和毕业项目实战,以及程序定制化开发…...
如何把word文档整个文档插入到excel表格里?
现象: 当我们双击此文档时可以快速打开对应的word文档 实现步骤: 1、点击一下要插入的excel表格里的单元格 2、选择上方的的【插入】【附件】的下拉框下的【对象】 3、选择【由文件创建】-【浏览】 再在弹出的框中选择【桌面】,选择要插…...
PDF文档中表格以及形状解析
我们在做PDF文档解析时有时需要解析PDF文档中的表格、形状等数据。跟解析文本类似的常见的解决方案也是两种。文档解析跟ocr技术处理。下面我们来看看使用文档解析的方案来做PDF文档中的表格、图形解析(使用pdfium库)。 表格解析: 在pdfium库…...
C++20 Lambda表达式新特性:包扩展与初始化捕获的强强联合
文章目录 一、Lambda表达式的历史回顾二、C20 Lambda表达式的两大新特性(一)初始化捕获(Init-Capture)(二)包扩展(Pack Expansion) 三、结合使用初始化捕获与包扩展(一&a…...
51c自动驾驶~合集52
我自己的原文哦~ https://blog.51cto.com/whaosoft/13383340 #世界模型如何推演未来的千万种可能 驾驶世界模型(DWM),专注于预测驾驶过程中的场景演变,已经成为追求自动驾驶的一种有前景的范式。这些方法使自动驾驶系统能够更…...
go设计模式
刘:https://www.bilibili.com/video/BV1kG411g7h4 https://www.bilibili.com/video/BV1jyreYKE8z 1. 单例模式 2. 简单工厂模式 代码逻辑: 原始:业务逻辑层 —> 基础类模块工厂:业务逻辑层 —> 工厂模块 —> 基础类模块…...
FREERTOS的三种调度方式
一、调度器的调度方式 调度器的调度方式解释针对的对象抢占式调度1.高优先级的抢占低优先级的任务 2.高优先级的任务不停止,低优先级的任务不能执行 3.被强占的任务会进入就绪态优先级不同的任务时间片调度1.同等优先级任务轮流享用CPU时间 2.没有用完的时间片&…...
前端依赖nrm镜像管理工具
npm 默认镜像 :https://registry.npmjs.org/ 1、安装 nrm npm install nrm --global2、查看镜像源列表 nrm ls3、测试当前环境下,哪个镜像源速度最快。 nrm test4、 切换镜像源 npm config get registry # 查看当前镜像源 nrm use taobao # 等价于 npm…...
redis repl_backlog_first_byte_offset 这个字段的作用
repl_backlog_first_byte_offset 是 Redis 复制积压缓冲区(Replication Backlog)中的一个关键字段,其作用是 标识积压缓冲区中第一个字节对应的全局复制偏移量。 通俗解释 当主从节点断开重连时,Redis 需要通过复制积压缓冲区&am…...
JavaScript基础(BOM对象、DOM节点、表单)
BOM对象 浏览器介绍 BOM:浏览器对象模型 IEChromeSafariFireFox 三方 QQ浏览器360浏览器 window对象 window代表浏览器窗口 window.innerHeight 734 window.innerWidth 71 window.outerHeight 823 window.outerWidth 782 Navigator对象(不常用&am…...
深度解析notion-enhancer组件化架构:从UI扩展到底层实现的设计模式
深度解析notion-enhancer组件化架构:从UI扩展到底层实现的设计模式 【免费下载链接】notion-enhancer An enhancer/customiser for the all-in-one productivity workspace Notion 项目地址: https://gitcode.com/gh_mirrors/no/notion-enhancer Notion作为现…...
C语言字符串必知:末尾有个隐藏的\0,新手易踩坑
C语言字符串 在C语言程序设计体系当中,字符串属于处理文本信息的核心载体,其设计逻辑跟底层实现深深地展现了C语言贴近硬件兼具高效灵活的语言特性,和一部分高级语言不一样,C语言并没有设置独立的字符串数据类型,而是经…...
前后端分离网站系统|SpringBoot+Vue+MyBatis+MySQL完整源码+部署教程
💡实话实说:有自己的项目库存,不需要找别人拿货再加价,所以能给到超低价格。摘要 随着互联网技术的快速发展,传统的前后端耦合架构在开发效率和维护成本上逐渐显现出局限性,前后端分离架构因其灵活性、可扩…...
Nano-Banana多场景落地:汽车内饰配件爆炸图AI辅助设计案例
Nano-Banana多场景落地:汽车内饰配件爆炸图AI辅助设计案例 1. 引言:当汽车设计遇上AI拆解美学 想象一下,你是一位汽车内饰设计师。面对一个复杂的中央扶手总成,里面有几十个塑料件、卡扣、线束和电子模块。你需要向客户、工程师…...
机器学习周报三十九
文章目录摘要Abstract1.TurboDiffusion1.1 注意力改进1.2蒸馏模型1.3权重量化2 训练和推理2.1 训练阶段2.2 推理阶段3 Make It Count3.1数据集3.2损失函数总结摘要 本周阅读了清华大学的论文《TurboDiffusion: Accelerating Video Diffusion Models by 100–200 Times》&#…...
Zynq PS端I2C避坑指南:为什么你的读操作总是失败?
Zynq PS端I2C读操作失败排查手册:从时序分析到实战修复 在嵌入式系统开发中,I2C总线因其简单性和多设备支持能力而广受欢迎。然而,当我们在Zynq SoC的PS端实现I2C通信时,特别是进行读操作时,经常会遇到各种意料之外的失…...
S2-Pro跨语言编程能力评测:根据中文注释生成多国语言代码
S2-Pro跨语言编程能力评测:根据中文注释生成多国语言代码 1. 评测背景与目标 在软件开发领域,跨语言编程能力正变得越来越重要。开发者经常需要在不同技术栈间切换,或者将一个语言的算法实现迁移到另一个语言。传统方式下,这需要…...
OpenClaw智能搜索:Qwen3.5-9B支持的知识检索与摘要
OpenClaw智能搜索:Qwen3.5-9B支持的知识检索与摘要 1. 为什么需要智能搜索助手 作为一个经常需要查阅技术文档的研究者,我每天要花大量时间在不同平台间切换——打开浏览器搜索、翻阅PDF论文、在GitHub仓库里找示例代码。最头疼的是,当需要…...
Spotless许可证头管理终极指南:如何自动化年份更新与版权保护
Spotless许可证头管理终极指南:如何自动化年份更新与版权保护 【免费下载链接】spotless Keep your code spotless 项目地址: https://gitcode.com/gh_mirrors/sp/spotless Spotless是一款强大的代码格式化工具,能够帮助开发者自动管理许可证头&a…...
IDToolsPico:Pico平台轻量级UUID与MAC生成库
1. IDToolsPico 库深度解析:面向嵌入式系统的 UUID 与 MAC 地址生成器 1.1 库定位与工程价值 IDToolsPico 是专为 Raspberry Pi Pico 平台设计的轻量级标识符生成库,核心目标是为资源受限的微控制器提供符合标准的、可重复使用的唯一设备标识能力。在物…...
