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

该思维导图由 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
《大规模数据处理实战》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(20)
- 最新
- 精选
- :)任何一个生命力的存在与发展都源于历史背景下的需求。 1. hive sql虽好,但是限制了spark的发展,hive sql已经满足不了广发人民群众对spark sql的的强烈需求,我们需要进入社会主义社会,你却还是用石头打猎,,不行滴,, 2. RDD是spark这座大厦的基石,那块砖就是RDD。RDD赋予了灵活性,但带来了另一个问题就是复杂性。灵活性和复杂性是一对永久不变的矛盾。 3.Dataset与DataFrame。我现在要建个房子,你直接给我4面墙一个顶就够了,不要一块砖一块砖的给我,我不但很懒而且很笨。Dataset与DataFrame是根据通用结构化数据处理的建立在RDD之上的封装。带来的便易性但是降低了一定的灵活性。
作者回复: 很好的总结
2019-05-22233 - cricket1981待处理数据的schema是静态的且对其完全掌控的情况下用DataSet,反之用DataFrame
作者回复: 嗯,基本上说的没错,而且在需要类型检测的时候要用DataSet。
2019-05-2225 - 涵老师好,我猜想DataSet适用于每列类型程序都很确定时使用,而DataFrame适用于列的类型不确定,类似于generic的类型,拿到数据后根据数据类型再进行不同的处理。是否可以这样理解?
作者回复: 👍🏻👍🏻
2019-05-22218 - Geek_9319到底 DataSet是DataFrame的特例?还是DataFrame 是DataSet的特例?
作者回复: DataFrame可以看做是DataSet的无类型特例,认为每一行都是一个Row object。但是先提出的是DataFrame, 后来才发展出了DataSet并将两者统一。
2019-05-2226 - 朱同学大部分情况下用dataset都没问题,限制因素主要是spark版本
作者回复: 说的很对,DataFrame的功能可以看做是Dataset的子集。
2019-05-224 - leesper感觉这就是传说中的Schema-on-read,传统的数据仓库只能存储结构化数据,对于非结构化数据的,后来有了data lake2019-08-194
- 珅剑DataSet在需要访问列中的某个字段时是非常方便的,但是如果要写一些适配性很强的函数时,如果使用DataSet,行的类型无法在编译时确定,可能是各种case class,这时候用DataFrame就可以比较好地解决问题2019-06-133
- 茂杨越来越喜欢spark了, 有了dataframe和dataset,就可以用sql这种函数式语言做项目了2020-09-121
- wydataframe是dataset的子集,类型是row,所以dataframe适合那些编译阶段无法确定字段数量和类型的查询,dataset适用那些编译阶段就明确知道字段详细详细信息的场景。2019-11-241
- 西北偏北Rdd是spark最底层的核心数据结构,但直接使用rdd的门槛较高,你得知道那些地方可以优化,比如filter要写在group之前。如若不然,写出来的计算,性能其差。 并且rdd没有字段类型名称信息,字段的获取和处理难度较高。 推荐使用spark sql更顶层,提供了schema信息,提供了对查询的优化。2019-07-111
收起评论