郭震 AI公众号:郭震AI

8 Spark核心概念之DataFrame与Dataset

发布日期:

分类: Spark

预计阅读: 3 分钟

阅读次数: 0

预计阅读3 分钟
结构重点6 个
图文要点0 张
正文规模1.4k 字

在上一篇中,我们详细介绍了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的一段代码:

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()

输出结果为:

+-----+---+
| Name| Id|
+-----+---+
|Alice|  1|
|  Bob|  2|
|Cathy|  3|
+-----+---+

2. Dataset概述

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

Dataset的主要特点包括:

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

示例:创建Dataset

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

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的使用场景,将会使我们在后续学习中更加游刃有余。

分享文章

转发到常用平台

微信/朋友圈可先复制链接

继续阅读

更多相关文章推荐

返回栏目

Reader Messages

读者留言

有问题、补充资料或实测结果,可以直接留下。这里不需要登录。

最多 800 字

为了防刷,每条留言会做长度、链接数量和提交频率限制。

0/800

留言列表

0
正在加载留言...