8 Spark核心概念之DataFrame与Dataset

在上一篇中,我们详细介绍了Spark中的RDD(弹性分布式数据集)这一核心概念。我们了解到,RDD是一种基本的抽象,能够进行弹性处理的分布式数据集合。虽然RDD提供了灵活性,但在处理结构化数据时,DataFrame和Dataset提供了更高层次的抽象和优化。本篇将深入介绍DataFrameDataset

1. DataFrame概述

DataFrame是Spark SQL中的一种数据结构,可以被视作一个以表格形式存储的数据集。它具有以下特点:

  • 分布式DataFrame是一个分布式的数据集合,可以在集群上进行操作。
  • 结构化:它由多个组成,每列具有特定的数据类型,类似于数据库中的表格。
  • 优化执行:Spark可以利用其Catalyst优化器对DataFrame进行优化执行,提升了性能。

创建DataFrame的常用方法有:

  • 从已有的RDD转换而来
  • 从外部数据源(如CSV、JSON、Parquet等)读取数据
  • 通过Spark SQL查询生成

示例:创建DataFrame

以下是创建DataFrame的一段代码:

1
2
3
4
5
6
7
8
9
10
11
12
from pyspark.sql import SparkSession

# 创建SparkSession
spark = SparkSession.builder.appName("DataFrameExample").getOrCreate()

# 创建DataFrame
data = [("Alice", 1), ("Bob", 2), ("Cathy", 3)]
columns = ["Name", "Id"]
df = spark.createDataFrame(data, columns)

# 显示DataFrame内容
df.show()

输出结果为:

1
2
3
4
5
6
7
+-----+---+
| Name| Id|
+-----+---+
|Alice| 1|
| Bob| 2|
|Cathy| 3|
+-----+---+

2. Dataset概述

Dataset是Spark的一种分布式数据集,它结合了RDD的强类型特性和DataFrame的优化特性。Dataset提供了编译时类型安全(即类型检查在编译阶段进行),同时仍然保留了操作数据的简单性和功能性。

Dataset的主要特点包括:

  • 类型安全Dataset在编译时进行类型检查,减少了运行时错误。
  • 支持复杂类型:可以包含复杂的数据结构,比如嵌套的对象和集合。
  • 优化执行Dataset同样可以享受到Catalyst优化器带来的执行性能提升。

示例:创建Dataset

下面是如何创建Dataset的一段代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from pyspark.sql import SparkSession
from pyspark.sql.types import StructType, StructField, StringType, IntegerType

# 创建SparkSession
spark = SparkSession.builder.appName("DatasetExample").getOrCreate()

# 定义Schema
schema = StructType([
StructField("Name", StringType(), True),
StructField("Id", IntegerType(), True)
])

# 创建Dataset
data = [("Alice", 1), ("Bob", 2), ("Cathy", 3)]
ds = spark.createDataFrame(data, schema).as[Row]

# 显示Dataset内容
ds.show()

在这个例子中,我们定义了数据的Schema,并创建了一个Dataset

3. DataFrame与Dataset的比较

特性 DataFrame Dataset
类型安全
操作方式 以表格的形式操作 以对象的形式操作
编程语言支持 Python, R, Scala, Java Scala, Java (不支持Python和R)
执行计划优化 Catalyst Catalyst

总结来说,选择DataFrameDataset应根据具体应用需求,如果需要编写类型安全的代码,推荐使用Dataset;而简单的数据处理任务可以选择DataFrame

4. 小结

本篇介绍了Spark中的DataFrameDataset,并通过具体代码示例展示了如何创建和操作它们。与上一篇中RDD相比,DataFrame和Dataset提供了更高层次的抽象,使得处理结构化数据更加简单和高效。

在接下来的章节中,我们将进入下一个主题——Spark执行模型,探讨Spark如何高效地执行作业。在此之前,理解DataFrame与Dataset的使用场景,将会使我们在后续学习中更加游刃有余。

8 Spark核心概念之DataFrame与Dataset

https://zglg.work/spark-zero/8/

作者

IT教程网(郭震)

发布于

2024-08-15

更新于

2024-08-16

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论