RDD和DataFrame两种数据结构的对比

文章目录

  • [1. 实战概述](#1. 实战概述)
  • [2. RDD(弹性分布式数据集)](#2. RDD(弹性分布式数据集))
    • [2.1 RDD概念](#2.1 RDD概念)
    • [2.2 RDD特点](#2.2 RDD特点)
    • [2.3 实战操作](#2.3 实战操作)
  • [3. DataFrame(数据帧)](#3. DataFrame(数据帧))
    • [3.1 DataFrame概念](#3.1 DataFrame概念)
    • [3.2 DataFrame优点](#3.2 DataFrame优点)
    • [3.3 实战操作](#3.3 实战操作)
  • [4. 实战小结](#4. 实战小结)

1. 实战概述

  • 今天我们将深入探讨 Apache Spark 中的两种核心数据结构:RDD(弹性分布式数据集)和 DataFrame。这两种结构是大数据处理的基石,为分布式计算提供了强大的支持。RDD 提供了对分布式数据集的基本操作,而 DataFrame 则在此基础上增加了对结构化数据的支持,使得数据处理更加高效和易于理解。了解它们的特性、优势以及适用场景,对于在 Spark 上进行高效的大数据处理至关重要。通过实际案例,我们将展示如何利用这些数据结构来解决实际问题。

2. RDD(弹性分布式数据集)

2.1 RDD概念

  • RDD,即弹性分布式数据集(Resilient Distributed Dataset),是Apache Spark中最基本的数据结构。它是一个不可变的、分布式的数据集合,由多个分区的数据组成,每个分区可以分布在集群的不同节点上。RDD提供了丰富的操作,包括转换(transformation)和行动(action),来处理数据。它的设计允许系统自动进行容错处理,即在数据丢失时能够自动恢复。RDD的不可变性意味着一旦创建,就不能更改其内容,只能通过转换操作生成新的RDD。这些特性使得RDD非常适合进行大规模并行数据处理。

2.2 RDD特点

  • 以数据类型作为参数,例如 RDD[User]
  • 只知道存储的数据是特定类的实例,但无法感知数据的内部结构,如列名和数据类型。

2.3 实战操作

  • net.huawei.sql包里创建RDDDemo对象
scala 复制代码
package net.huawei.sql

import org.apache.spark.rdd.RDD
import org.apache.spark.sql.SparkSession

/**
 * 功能:RDD演示
 * 作者:华卫
 * 日期:2025年01月16日
 */
// 创建用户样例类
case class User(name: String, gender: String, age: Long)

object RDDDemo {
  def main(args: Array[String]): Unit = {
    // 获取或创建Spark会话对象
    val spark = SparkSession.builder()
      .appName("SparkSQLTest")
      .master("local[*]")
      .getOrCreate()

    // 导入隐式转换
    import spark.implicits._

    // 创建用户对象序列
    val users = Seq(
      User("陈燕文", "女", 30),
      User("张三丰", "男", 25),
      User("李文军", "男", 35),
      User("郑智化", "男", 40)
    )

    // 将序列转换为RDD
    val userRDD: RDD[User] = spark.sparkContext.parallelize(users)
    // 过滤年龄大于30的用户
    val userRDD1: RDD[User] = userRDD.filter(user => user.age > 30)
    // 使用map函数提取name和age字段
    val userRDD2: RDD[(String, Long)] = userRDD1.map(user => (user.name, user.age))
    // 执行一个行动操作来触发实际计算
    userRDD2.collect().foreach(println)
  }
}
  • 运行程序,查看结果

3. DataFrame(数据帧)

3.1 DataFrame概念

  • DataFrame 是 Apache Spark 中一种高级的数据结构,以表格形式组织数据,提供了丰富的数据操作功能。与 RDD 相比,DataFrame 能够理解数据的模式,即知道数据存储在哪些列中,以及每列的数据类型。这种结构不仅使得数据操作更加直观和方便,还支持 SQL 查询和多种数据源的读取,极大地简化了数据分析和处理过程。DataFrame 的引入,使得 Spark 在处理结构化数据时更加高效和强大。

3.2 DataFrame优点

  • 支持使用 SQL 语句进行数据分析。
  • 在大部分数据分析场景下比使用 RDD 更加简洁和方便。

3.3 实战操作

  • net.huawei.sql包里创建DataFrameDemo对象
scala 复制代码
package net.huawei.sql

import org.apache.spark.sql.SparkSession

/**
 * 功能:数据帧演示
 * 作者:华卫
 * 日期:2025年01月16日
 */
// 创建用户样例类
case class User(name: String, gender: String, age: Long)

object DataFrameDemo {
  def main(args: Array[String]): Unit = {
    // 获取或创建Spark会话对象
    val spark = SparkSession.builder()
      .appName("SparkSQLTest")
      .master("local[*]")
      .getOrCreate()

    // 导入隐式转换
    import spark.implicits._

    // 创建用户对象序列
    val users = Seq(
      User("陈燕文", "女", 30),
      User("张三丰", "男", 25),
      User("李文军", "男", 35),
      User("郑智化", "男", 40)
    )

    // 基于序列创建数据帧
    val userDF = users.toDF()
    // 创建临时视图
    userDF.createOrReplaceTempView("user")
    // SQL查询:年龄30岁以上,只显示姓名与年龄
    val userDF1 = spark.sql("SELECT name, age FROM user WHERE age > 30")
    // 显示查询结果
    userDF1.show()
  }
}
  • 运行程序,查看结果

4. 实战小结

  • 通过本次实战,我们掌握了 Apache Spark 中 RDD 和 DataFrame 的基本概念和操作。RDD 提供了对分布式数据集的基本操作,适用于需要自定义分区和转换的场景。DataFrame 则为结构化数据提供了更高效的处理方式,支持 SQL 查询和数据分析。在实际应用中,我们可以根据数据特性和处理需求,灵活选择使用 RDD 或 DataFrame。通过对比,我们发现 DataFrame 在处理表格数据时更为直观和高效,而 RDD 在需要细粒度控制时更为适用。
相关推荐
递归尽头是星辰13 天前
Spark核心技术解析:从RDD到Dataset的演进与实践
大数据·rdd·dataset·spark核心·spark编程模型
CodeCraft Studio1 个月前
Excel处理控件Aspose.Cells教程:使用 Python 将 Pandas DataFrame 转换为 Excel
python·json·excel·pandas·csv·aspose·dataframe
XueminXu1 个月前
Spark引擎中RDD的性质
spark·cache·map·rdd·flatmap·弹性分布式数据集·collect
闲人编程7 个月前
Pandas使用教程 - Pandas 与 Excel 高级操作
数据分析·excel·pandas·dataframe·高级·工作表
howard20059 个月前
SparkSQL数据模型综合实践
数据模型·dataframe·sparksql
engchina10 个月前
PyCharm 中打印完整的 DataFrame
ide·python·pycharm·dataframe
xiaoping.huang10 个月前
Spark执行计划解析后是如何触发执行的?
大数据·spark·rdd
PersistJiao1 年前
Spark RDD 的宽依赖和窄依赖
spark·rdd·宽窄依赖
PersistJiao1 年前
Spark RDD(弹性分布式数据集)的深度理解
大数据·分布式·spark·rdd