当前位置: 首页 > news >正文

Spark核心数据(RDD、DataFrame 和 Dataset) - 教程

在 Spark 中,RDD、DataFrame 和 Dataset 是三种核心数据抽象,它们既一脉相承又各有侧重,以下从定义、特性、关系及语法支持等方面详细说明:

一、核心定义与特性

1. RDD(Resilient Distributed Dataset,弹性分布式数据集)
2. DataFrame
  • 定义:分布式的二维表结构数据集合,包含行和列,且有明确的 schema(字段名和数据类型)。
  • 核心特性
    • 有 schema:类似数据库表结构,预先定义列名和类型(如 id: int, name: string)。
    • 优化执行:依赖 Catalyst 优化器,自动优化执行计划(如谓词下推、列裁剪)。
    • 多数据源兼容:可直接读取 CSV、JSON、Parquet、Hive 表等结构化数据。
    • 无类型安全:编译/运行前不检查字段类型,错误可能在执行时暴露(如访问不存在的列)。
3. Dataset(主要支持 Java/Scala,Python 不原生支持)
  • 定义:DataFrame 与 RDD 的结合体,既保留 schema 信息,又支持类型安全(编译时类型检查)。
  • 核心特性
    • 强类型绑定:数据与 Java/Scala 类(如 Case Class)绑定,操作时直接访问类属性。
    • 双重接口:支持 RDD 风格的 lambda 函数操作,也支持 DataFrame 的 SQL 和 API 操作。
    • 优化执行:同样基于 Catalyst 优化器,性能与 DataFrame 接近。
    • 编译时检查:字段错误(如拼写错误、类型不匹配)在编译阶段即可发现。

二、三者之间的关系

  1. 底层依赖关系

    • DataFrame 和 Dataset 底层均基于 RDD 实现(可通过 .rdd 方法转换为 RDD)。
    • Dataset 在 Spark 2.0 后与 DataFrame 统一,在 Scala 中 DataFrame = Dataset[Row]Row 是无类型的行对象)。
  2. 演进关系

    • RDD 是 Spark 1.0 的核心抽象,解决了分布式计算的基础问题(容错、并行)。
    • DataFrame 是 Spark 1.3 引入的结构化数据抽象,弥补 RDD 无 schema、无优化器的缺陷。
    • Dataset 是 Spark 1.6 引入的类型安全抽象,在 Java/Scala 中增强了数据操作的安全性。
  3. 功能覆盖

    • RDD 功能最基础,支持所有数据类型(结构化、非结构化),但无优化。
    • DataFrame 和 Dataset 专注于结构化数据,通过 schema 和优化器提升效率,Dataset 额外增加类型安全。

三、支持的语法(分语言示例)

1. RDD 语法(Python/Scala 通用风格)
# Python 示例
# 创建 RDD
rdd = sc.parallelize([(1, "Alice", 25), (2, "Bob", 30)])
# 转换操作:过滤年龄>28的记录,提取id和姓名
filtered_rdd = rdd.filter(lambda x: x[2] > 28)
result_rdd = filtered_rdd.map(lambda x: (x[0], x[1]))
# 行动操作:收集结果
print(result_rdd.collect())  # 输出:[(2, 'Bob')]
// Scala 示例
val rdd = sc.parallelize(Seq((1, "Alice", 25), (2, "Bob", 30)))
val result = rdd.filter(_._3 > 28).map(x => (x._1, x._2)).collect()
2. DataFrame 语法(SQL + API 风格)
# Python 示例
from pyspark.sql.types import StructType, StructField, IntegerType, StringType
# 定义 schema 并创建 DataFrame
schema = StructType([
StructField("id", IntegerType()),
StructField("name", StringType()),
StructField("age", IntegerType())
])
df = spark.createDataFrame([(1, "Alice", 25), (2, "Bob", 30)], schema)
# 方式1:DataFrame API
result_df = df.filter(df.age > 28).select("id", "name")
# 方式2:SQL 操作(需注册临时视图)
df.createOrReplaceTempView("users")
result_df = spark.sql("SELECT id, name FROM users WHERE age > 28")
result_df.show()
# +---+----+
# | id|name|
# +---+----+
# |  2| Bob|
# +---+----+
3. Dataset 语法(Scala 类型安全风格)
// Scala 示例
// 定义样例类(与数据结构绑定)
case class User(id: Int, name: String, age: Int)
// 创建 Dataset
val ds = spark.createDataset(Seq(User(1, "Alice", 25), User(2, "Bob", 30)))
// 方式1:类型安全的 lambda 操作
val filteredDs = ds.filter(_.age > 28)  // 直接访问类属性,编译时检查
// 方式2:混合使用 DataFrame API
val resultDs = filteredDs.select("id", "name")
resultDs.show()
// +---+----+
// | id|name|
// +---+----+
// |  2| Bob|
// +---+----+

四、对比总结

维度RDDDataFrameDataset(Java/Scala)
数据结构无 schema(对象集合)有 schema(二维表)有 schema(绑定类)
类型安全支持(针对对象)不支持(运行时检查)支持(编译时检查)
优化器有(Catalyst)有(Catalyst)
操作接口函数式 API(map 等)SQL + DataFrame APISQL + API + lambda
适用场景非结构化数据处理结构化数据+SQL分析类型安全的结构化处理
Python 支持完全支持完全支持不支持

选择建议

  • 处理文本、图像等非结构化数据 → RDD
  • 结构化数据的 ETL、BI 分析 → DataFrame
  • Java/Scala 环境下需类型安全保障 → Dataset
http://www.jsqmd.com/news/348980/

相关文章:

  • 基于鲸鱼优化的LSTM深度学习网络模型(WOA-LSTM)的一维时间序列预测算法matlab仿真
  • 2026年知名的臭氧负离子发生器/杀菌消毒负离子发生器优质供应商推荐(信赖) - 行业平台推荐
  • 2026十三款工具横评:从CRM到一体化云企业管理系统选型指南 - 毛毛鱼的夏天
  • 百考通AI:智能文献综述神器,让学术研究事半功倍!
  • postgresql日常维护和检查一-处理表、索引膨胀
  • 聚氨酯筛板加工厂哪家品牌好用,江苏地区高性价比选择有哪些 - 工业品牌热点
  • 2026销售管理系统盘点:10款全链路CRM+供应链系统横向对比 - 毛毛鱼的夏天
  • 百考通AI:开题报告智能生成专家,让学术起点不再迷茫!
  • 2026CRM系统排行榜:9 大主流品牌数字化工具核心能力横评 - 毛毛鱼的夏天
  • 百考通AI:智能问卷设计,让市场调研与用户洞察变得简单高效!
  • 传统成果转化困局如何破?生态协同机制助力学术产业双赢
  • catman Easy/AP | 应变四分之一桥温度补偿的理论与实践
  • PPT 批量转图片:在 Web 预览中实现翻页效果(C#/VB.NET) - E
  • 百考通AI:毕业论文写作的智能“加速器”,轻松搞定学术难题!
  • 构建成果转化新生态,赋能高校科研创新
  • 科技成果转化的未来之路——构建区域创新生态新范式
  • 百考通AI:论文降重与去AI痕迹的智能解决方案,让毕业无忧!
  • 谈河北政润研发能力,陕西山西用户口碑好的产品推荐 - mypinpai
  • 2026年评价高的助眠等离子发生器/除尘除味等离子发生器厂家推荐及选择参考 - 行业平台推荐
  • 高校科研转化新引擎:构建科技成果转化的数智化未来
  • java分支与循环
  • ceph缓存分层
  • 百考通AI:权威AIGC检测,为学术诚信保驾护航
  • 一文读懂 Java 主流编译器:特性、场景与选择指南
  • 传统成果转化困局破解之道——高校科研生态协同机制的创新实践
  • ZooKeeper 是什么?看完这篇,社招面试再也不虚
  • 高校科研转化新路径:生态协同机制助力学术产业双赢
  • 查重太高?AI检测又红了?别emo!百考通「降重+降AI」来给你论文“一键真人化+学术柔光滤镜”啦~
  • 有效运用长尾关键词优化SEO策略的实用指南
  • 查重太高?AI检测又亮红灯?别慌!百考通「降重+降AI」来给你论文“一键真人化+学术柔光滤镜”啦~