Spark 基础 RDD、DataFrame 和 DataSet 区别与联系

RDD、DataFrame 和 DataSet 简单介绍

RDD

Spark的基石,像分布式数组:

  • 不可变、分区的数据集合
  • 支持并行计算和自动容错
  • 两种操作:转换(transform)和行动(action)
  • 灵活但无结构,需手动优化
  • 适合底层数据处理,常与MLlib搭配

DataFrame

像数据库表格的升级版:

  • 带Schema的二维数据结构
  • 支持SQL查询和优化器
  • API比RDD更友好(类似Pandas)
  • 运行时类型检查
  • 结构化数据处理首选

DataSet

DataFrame的加强版:

  • 结合RDD的类型安全和DataFrame的优化
  • 编译时类型检查(如DataSet[User])
  • 编码器高效序列化
  • 适合复杂业务场景

区别

核心特性对比

维度RDDDataFrameDataSet
类型安全编译时类型安全仅运行时类型检查编译时类型安全
序列化Java序列化(全对象)二进制序列化(堆外存储)编码器(按需访问)
优化Catalyst查询优化Catalyst查询优化
API风格面向对象(方法链)声明式(SQL风格)混合式(两者优点)
GC影响高(频繁对象创建)低(堆外内存)中(智能编码器)

性能天梯

处理速度:DataFrame ≈ DataSet > RDD (最高可差10倍)
内存占用:RDD > DataSet > DataFrame
开发效率:DataSet ≈ DataFrame > RDD

最佳使用场景

RDD

  • 需要精细控制底层操作时
  • 使用非结构化数据(如文本流)
  • 与遗留代码集成
  • 配合MLlib的早期版本

DataFrame

  • 处理结构化/半结构化数据(JSON, Parquet等)
  • 需要SQL交互时
  • 追求最佳性能
  • 进行ETL流水线操作

DataSet

  • 需要类型安全的复杂业务逻辑
  • 使用Scala强类型系统
  • 平衡性能与开发体验
  • 处理领域对象(如User, Product等)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值