大规模数据处理实战
蔡元楠
硅谷资深工程师
41608 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 46 讲
大规模数据处理实战
15
15
1.0x
00:00/00:00
登录|注册

15 | Spark SQL:Spark数据查询的利器

错误检测
性能
不变性与分区
发展历史
每一列不存储类型信息
结构化存储机制
特殊的DataSet
类似关系型数据库中表的特性
逻辑计划和物理计划
优化过的执行引擎
不可变分布式的数据单元
数据集的意思
DataSet API
DataFrame API
类似于SQL的操作接口
SparkSQL
Shark
Hive
Hadoop/MapReduce
小结
RDD、DataFrame、DataSet对比
DataFrame
DataSet
架构
发展历史
思考题
Spark SQL
参考文章

该思维导图由 AI 生成,仅供参考

你好,我是蔡元楠。
上一讲中,我介绍了弹性分布式数据集的特性和它支持的各种数据操作。
不过在实际的开发过程中,我们并不是总需要在 RDD 的层次进行编程。
就好比编程刚发明的年代,工程师只能用汇编语言,到后来才慢慢发展出高级语言,如 Basic、C、Java 等。使用高级语言大大提升了开发者的效率。
同样的,Spark 生态系统也提供很多库,让我们在不同的场景中使用。
今天,让我们来一起探讨 Spark 最常用的数据查询模块——Spark SQL。

Spark SQL 发展历史

几年前,Hadoop/MapReduce 在企业生产中的大量使用,HDFS 上积累了大量数据。
由于 MapReduce 对于开发者而言使用难度较大,大部分开发人员最熟悉的还是传统的关系型数据库。
为了方便大多数开发人员使用 Hadoop,Hive 应运而生。
Hive 提供类似 SQL 的编程接口,HQL 语句经过语法解析、逻辑计划、物理计划转化成 MapReduce 程序执行,使得开发人员很容易对 HDFS 上存储的数据进行查询和分析。
在 Spark 刚问世的时候,Spark 团队也开发了一个 Shark 来支持用 SQL 语言来查询 Spark 的数据。
Shark 的本质就是 Hive,它修改了 Hive 的内存管理模块,大幅优化了运行速度,是 Hive 的 10 倍到 100 倍之多。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Spark SQL是Spark生态系统中最常用的数据查询模块,它的发展历史经历了从Hive到Shark再到SparkSQL的演变。Spark SQL提供了DataFrame和DataSet两种API,使得开发者可以像操作关系型数据库一样操作数据,而不是直接操作RDD。DataFrame和DataSet都是基于RDD的结构化数据抽象,拥有不变性、分区、存储依赖关系等特性,同时也具有类似于关系型数据库的结构化信息。相比于RDD API,DataFrame和DataSet API能够自动优化程序,提升开发效率。然而,RDD API在处理非结构化数据方面具有独特优势,因此在实际开发中需要根据具体场景选择合适的API。总的来说,Spark SQL的发展历程、架构和API特点使得它成为了数据查询的利器。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《大规模数据处理实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(20)

  • 最新
  • 精选
  • :)
    任何一个生命力的存在与发展都源于历史背景下的需求。 1. hive sql虽好,但是限制了spark的发展,hive sql已经满足不了广发人民群众对spark sql的的强烈需求,我们需要进入社会主义社会,你却还是用石头打猎,,不行滴,, 2. RDD是spark这座大厦的基石,那块砖就是RDD。RDD赋予了灵活性,但带来了另一个问题就是复杂性。灵活性和复杂性是一对永久不变的矛盾。 3.Dataset与DataFrame。我现在要建个房子,你直接给我4面墙一个顶就够了,不要一块砖一块砖的给我,我不但很懒而且很笨。Dataset与DataFrame是根据通用结构化数据处理的建立在RDD之上的封装。带来的便易性但是降低了一定的灵活性。

    作者回复: 很好的总结

    2019-05-22
    2
    33
  • cricket1981
    待处理数据的schema是静态的且对其完全掌控的情况下用DataSet,反之用DataFrame

    作者回复: 嗯,基本上说的没错,而且在需要类型检测的时候要用DataSet。

    2019-05-22
    25
  • 老师好,我猜想DataSet适用于每列类型程序都很确定时使用,而DataFrame适用于列的类型不确定,类似于generic的类型,拿到数据后根据数据类型再进行不同的处理。是否可以这样理解?

    作者回复: 👍🏻👍🏻

    2019-05-22
    2
    18
  • Geek_9319
    到底 DataSet是DataFrame的特例?还是DataFrame 是DataSet的特例?

    作者回复: DataFrame可以看做是DataSet的无类型特例,认为每一行都是一个Row object。但是先提出的是DataFrame, 后来才发展出了DataSet并将两者统一。

    2019-05-22
    2
    6
  • 朱同学
    大部分情况下用dataset都没问题,限制因素主要是spark版本

    作者回复: 说的很对,DataFrame的功能可以看做是Dataset的子集。

    2019-05-22
    4
  • leesper
    感觉这就是传说中的Schema-on-read,传统的数据仓库只能存储结构化数据,对于非结构化数据的,后来有了data lake
    2019-08-19
    4
  • 珅剑
    DataSet在需要访问列中的某个字段时是非常方便的,但是如果要写一些适配性很强的函数时,如果使用DataSet,行的类型无法在编译时确定,可能是各种case class,这时候用DataFrame就可以比较好地解决问题
    2019-06-13
    3
  • 茂杨
    越来越喜欢spark了, 有了dataframe和dataset,就可以用sql这种函数式语言做项目了
    2020-09-12
    1
  • wy
    dataframe是dataset的子集,类型是row,所以dataframe适合那些编译阶段无法确定字段数量和类型的查询,dataset适用那些编译阶段就明确知道字段详细详细信息的场景。
    2019-11-24
    1
  • 西北偏北
    Rdd是spark最底层的核心数据结构,但直接使用rdd的门槛较高,你得知道那些地方可以优化,比如filter要写在group之前。如若不然,写出来的计算,性能其差。 并且rdd没有字段类型名称信息,字段的获取和处理难度较高。 推荐使用spark sql更顶层,提供了schema信息,提供了对查询的优化。
    2019-07-11
    1
收起评论
显示
设置
留言
20
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部