Structure_介绍历史更迭 | 学习笔记

简介: 快速学习 Structure_介绍历史更迭

开发者学堂课程【大数据Spark2020版(知识精讲与实战演练)第五阶段:Structure_介绍历史更迭 】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/692/detail/12140


Structure_介绍历史更迭

内容介绍:

一. 编程模型的进化过程

二. RDD , DataFrame 和 Dataset 的优缺点

三.总结

 

一.编程模型的进化过程

本节开始 Structured Streaming 的学习, Structured Streaming 是 Spark Streaming 的进化版,所以在了解 Structured Streaming 之前我们可以先了解一下 Spark Streaming ,我们还需要了解 spark API 的过程以便理解为何在 Spark Streaming 之上要增加一个 Structured Streaming 这个概念。

第一章节进行回顾和展望,了解过去 spark 是如何进步的,在未来 spark 可能发生什么变化,此过程我们需学习三个知识点。编程模型的进化过程,序列化的进化过程,Spark Streaming 和 Structured Streaming 之间的区别

Structured Streaming 相对于 Spark Streaming 在编程上进步了很多, spark 的变成模型是怎么进化的,大概沿着一个什么样的路径在变化。理解这个要点能够帮助我们理解 Structured Streaming ,编程模型和内在的解决方案是什么。


二.RDD , DataFrame 和 Dataset 的优缺点:

1.编程模型 RDD 的优点和缺陷

RDD 的好处有很多,首先其可以直接使用函数式的 API 来进行处理,如以下的词频统计,如果写一个 mapproduce 程序会非常困难,而 RDD 使整个 API 得到很大的简化,

rdd.flatMap(.split(""))

.map((_1))

.reduceByKey(_+_)

.collect

而 flatmap 可以处理任意类型的对象,即 RDD 后面可以是任何类型的对象,

举个例子

val rdd1=……    (可以是任何情况得到的 RDD )

val rdd2:RDD[String]=rdd1.flatMap

val rdd3:RDD[(String,Int)]=rdd2.map

所以 RDD 后面的范型可以是任意对象类型,也是其比较高级的用法。 RDD 可以处理 person 对象,可以处理 student 对象,可以处理 employee 对象以及 teacher 对象,包括 people 对象, user 对象等。因为 RDD 无法感知对象,只会将对象当成数据进行序列化,然后反序列化帮助你进行相应的操作。

(1)优点:

针对自定义数据对象进行处理,可以处理任意类型的对象,比较符合面向对象

(2)缺点:

无法感知对象类型,无法感知数据结构,使用时造成了一些困扰,无法针对数据结构进行编程,没有对结构化数据进行 API 层面的优化。使用 RDD 时,把这个对象当成一个黑盒子,过程中没有上层的优化。

2.编程模型 DataFrame 的优点和缺陷

spark.read

.csv("...")

.where($"name”=!="")

.groupBy($"name")

.show()

(1)优点:

DataFrame 保留有数据的元信息(数据是怎样的,由哪些列组成), API 针对数据的结构进行处理,例如说可以根据数据的某一列进行排序或者分组。

(在 RDD 中这并不容易实现,虽然有 group ,但是和 DataFrame 当中直接针对某一个字段进行 group 相比差距很大 ),2011 年有 RDD ,到 2013 年出现了DataFrame ,DataFrame 在执行的时候会经过 Catalyst 进行优化,可以减少因程序员写法错误造成的性能损失,并且序列化更加高效。性能会更好, DataFrame 存储数据是列式的,在大数据的处理当中列式的会更加高效。

(2)缺点:

使用 map 的时候都拿到的是一个 row 对象,都要通过这个 row 对象来进行操作。所以 DataFrame 可以感知到数据结构,但是它是无类型的,它所有的类型都是 row ,所以 DataFrame 只能处理结构化的数据,它无法处理非结构化的数据。因为 DataFrame 内部使用 row 对象来保存数据。

Spark 为 DataFrame 设计了新的读写框架,也就是说正常情况下 RDD 只能通过 text file 来去读,但是 DataFrame 可以使用 spark.read 然后 CSV,然后 parkey Jason, 可以直接读某一种格式的这个文件。

这是 DataFrame 一个很大的进化点, DataFrame 有一个缺点,只能处理结构化数据。所以 Spark 又在 2015 年的时候出现了 Dataset。

3.编程模型 Dataset 缺陷

spark.read

.csv("...")

.as[Person]

.where(_.name!= ""

.groupByKey(_.name)

.count()

.show()

(1)优点:

Dataset 在 15 年产生, Dataset 它的目标就是为了代替掉 DataFrame,在 Spark 1.6 出现了这个 Dataset 以后,DataFrame 就变成了 Dataset 的一个附庸。

DataFrame 这个类型其实就是 Dataset ,它里面放了 row 这样的类型,所以 Dataset 具有 DataFrame 里面所有的 API ,但是 Dataset 当中不只可以存放 row 对象,它可以存放 person 对象、 string 对象、student 对象、 teacher 对象等,各种对象都可以存。并且 Dataset 可以使用有类型的 API。

正常情况下,在 DataFrame 当中都是拿 row 来操作,所以 DataFrame 当中永远都是根据某一个列来进行处理的,但是 Dataset 当中可以使用一整个对象来进行处理。比如说这个对象中有一个 name ,可以把这个 name  group 一下,这是 Dataset 的好处。也就是说 Dataset 结合了 RDD 有对象类型的特点和 DataFrame 代码经过优化再执行的特点,也结合了 DataFrame 针对结构化数据来进行优化的特点。所以从 API 的角度上来讲, dataset 可以支持任何类型的结构化数据的处理,也可以处理非结构化数据。

DataFrame 的性能优势 Dataset 上也有, Dataset 的有类型 API 和无类型 API 都会经过 Catalyst 优化器来进行优化。

在学习此章节我们需要注意一个问题,并不是因为 RDD 有问题,我们才研究出 DataFrame , 用 RDD 的时候我们并未发现其有什么缺陷,直到 DataFrame 出现,我们才意识到 RDD 实则不是很高级, API 的进化是一个隐性的过程。

目前在使用 Dataset 时也并未发现很多问题,也许将来出现了一个新的模型我们才能意识到其存在一些问题。

 

三.总结

1.RDD 的优缺点:

(1)优点: RDD 是面向对象的,在操作的时候可以直接拿到对象。并且 RDD 可以处理任何类型数据。

(2)缺点: RDD 运行速度比较慢,执行的过程没有经过优化,任何的一个关系型数据库,它在执行 secret 语句的时候一定会经过优化,优化以后确实会比较快。RDD 的 API 会比较僵硬一些,对结构化的数据的访问没有任何的优化,所以使用不是很便利。

2.DataFrame 的优缺点:

(1)优点: DataFrame 针对结构化数据高度优化,可以直接使用某一个列,某一个字段去操作和访问数据。增加了 Catalyst 优化器,会优化一整个执行的过程。

在这个 DataFrame 当中是先生成这个逻辑计划,经过一系列的优化生成物理计划,再经过成本模型选择一个更好的物理计划,然后再去执行。

(2)缺点: DataFrame 的优点其实也是缺点,DataFrame 只能支持结构化数据的操作,这一点是一个硬伤。并且 DataFrame 当中无类型的 API ,有时候可能没有那么的方便。

3.Dataset 的优势

SQL 明显也有缺点,我们利用 Dataset 结合 DataFrame 和 RDD 的优缺点, Dataset 结合了 RDD 和 DataFrame 的 API 既可以处理结构化数据,也可以处理非结构化数据,既包含了有类型的 API 也有无类型的 API ,可以灵活的选择。

相关文章
|
2月前
|
SQL 人工智能 关系型数据库
如何实现MySQL百万级数据的查询?
本文探讨了在MySQL中对百万级数据进行排序分页查询的优化策略。面对五百万条数据,传统的浅分页和深分页查询效率较低,尤其深分页因偏移量大导致性能显著下降。通过为排序字段添加索引、使用联合索引、手动回表等方法,有效提升了查询速度。最终建议根据业务需求选择合适方案:浅分页可加单列索引,深分页推荐联合索引或子查询优化,同时结合前端传递最后一条数据ID的方式实现高效翻页。
128 0
|
3月前
|
数据采集 人工智能 数据可视化
如何让AI写出高质量的数据分析报告?DataV-Note的评估体系揭秘
本文围绕DataV-Note智能分析创作平台的评估体系建设展开,旨在探索如何在AI技术快速发展的背景下,构建一套科学、可量化、多维度的数据分析报告评估体系。
215 10
|
3月前
|
算法 架构师 Java
Java 开发岗及 java 架构师百度校招历年经典面试题汇总
以下是百度校招Java岗位面试题精选摘要(150字): Java开发岗重点关注集合类、并发和系统设计。HashMap线程安全可通过Collections.synchronizedMap()或ConcurrentHashMap实现,后者采用分段锁提升并发性能。负载均衡算法包括轮询、加权轮询和最少连接数,一致性哈希可均匀分布请求。Redis持久化有RDB(快照恢复快)和AOF(日志更安全)两种方式。架构师岗涉及JMM内存模型、happens-before原则和无锁数据结构(基于CAS)。
91 5
|
7月前
|
人工智能 自然语言处理 算法
阿里云云市场专区在杭州数据交易所上线啦!
阿里云云市场专区在杭州数据交易所上线啦!
|
9月前
|
资源调度 监控 数据可视化
贝尔宾团队角色理论:高效团队的9种角色
贝尔宾团队角色理论将团队分为思考、行动、社交三类九种角色,明确角色定位可优化协作。
1436 0
贝尔宾团队角色理论:高效团队的9种角色
|
10月前
|
存储 供应链 安全
重塑信任:区块链技术如何打造数字世界的全新安全生态
【10月更文挑战第32天】区块链技术自比特币诞生以来,以其去中心化特性吸引了全球关注。本文通过最佳实践探讨区块链如何重塑数字世界的信任体系,包括保障数据真实性、身份验证与隐私保护以及提升投票系统的安全性和透明度。通过智能合约示例,展示了区块链在供应链管理、身份管理和投票系统中的应用。区块链技术正推动各行各业的创新与发展。
281 2
|
11月前
|
JSON 数据格式
使用 sendBeacon 发送数据
【10月更文挑战第6天】
390 2
|
11月前
|
机器学习/深度学习 人工智能 自然语言处理
人工智能的未来:从机器学习到深度学习的演进
【10月更文挑战第8天】人工智能的未来:从机器学习到深度学习的演进
185 0
|
关系型数据库 MySQL 数据安全/隐私保护
MySQL下载与安装
MySQL下载与安装 MySQL下载与安装 一. MySQL下载 1. 进入MySQL官网 官网地址:https://www.mysql.com/ 2. 点击DOWNLOADS 3. 点击Community(GPL) Downloads 4.
3118 0
|
移动开发 小程序 JavaScript
微信公众号借助小程序云函数实现支付功能
微信公众号借助小程序云函数实现支付功能
796 0