大规模数据处理实战
蔡元楠
Google Brain资深工程师
立即订阅
8443 人已学习
课程目录
已完结 46 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 从这里开始,带你走上硅谷一线系统架构师之路
免费
模块一 | 直通硅谷大规模数据处理技术 (3讲)
01 | 为什么MapReduce会被硅谷一线公司淘汰?
02 | MapReduce后谁主沉浮:怎样设计下一代数据处理技术?
03 | 大规模数据处理初体验:怎样实现大型电商热销榜?
模块二 | 实战学习大规模数据处理基本功 (8讲)
04 | 分布式系统(上):学会用服务等级协议SLA来评估你的系统
05 | 分布式系统(下):架构师不得不知的三大指标
06 | 如何区分批处理还是流处理?
07 | Workflow设计模式:让你在大规模数据世界中君临天下
08 | 发布/订阅模式:流处理架构中的瑞士军刀
09 | CAP定理:三选二,架构师必须学会的取舍
10 | Lambda架构:Twitter亿级实时数据分析架构背后的倚天剑
11 | Kappa架构:利用Kafka锻造的屠龙刀
模块三 | 抽丝剥茧剖析Apache Spark设计精髓 (10讲)
12 | 我们为什么需要Spark?
13 | 弹性分布式数据集:Spark大厦的地基(上)
14 | 弹性分布式数据集:Spark大厦的地基(下)
15 | Spark SQL:Spark数据查询的利器
16 | Spark Streaming:Spark的实时流计算API
17 | Structured Streaming:如何用DataFrame API进行实时数据分析?
18 | Word Count:从零开始运行你的第一个Spark应用
19 | 综合案例实战:处理加州房屋信息,构建线性回归模型
20 | 流处理案例实战:分析纽约市出租车载客信息
21 | 深入对比Spark与Flink:帮你系统设计两开花
模块四 | Apache Beam为何能一统江湖 (8讲)
22 | Apache Beam的前世今生
23 | 站在Google的肩膀上学习Beam编程模型
24 | PCollection:为什么Beam要如此抽象封装数据?
25 | Transform:Beam数据转换操作的抽象方法
26 | Pipeline:Beam如何抽象多步骤的数据流水线?
27 | Pipeline I/O: Beam数据中转的设计模式
28 | 如何设计创建好一个Beam Pipeline?
29 | 如何测试Beam Pipeline?
模块五 | 决战 Apache Beam 真实硅谷案例 (7讲)
30 | Apache Beam实战冲刺:Beam如何run everywhere?
31 | WordCount Beam Pipeline实战
32 | Beam Window:打通流处理的任督二脉
33 | 横看成岭侧成峰:再战Streaming WordCount
34 | Amazon热销榜Beam Pipeline实战
35 | Facebook游戏实时流处理Beam Pipeline实战(上)
36 | Facebook游戏实时流处理Beam Pipeline实战(下)
模块六 | 大规模数据处理的挑战与未来 (4讲)
37 | 5G时代,如何处理超大规模物联网数据
38 | 大规模数据处理在深度学习中如何应用?
39 | 从SQL到Streaming SQL:突破静态数据查询的次元
40 | 大规模数据处理未来之路
专栏加餐 | 特别福利 (4讲)
FAQ第一期 | 学习大规模数据处理需要什么基础?
加油站 | Practice makes perfect!
FAQ第二期 | Spark案例实战答疑
FAQ第三期 | Apache Beam基础答疑
结束语 (1讲)
结束语 | 世间所有的相遇,都是久别重逢
大规模数据处理实战
登录|注册

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

蔡元楠 2019-05-22
你好,我是蔡元楠。
上一讲中,我介绍了弹性分布式数据集的特性和它支持的各种数据操作。
不过在实际的开发过程中,我们并不是总需要在 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/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《大规模数据处理实战》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(17)

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

    作者回复: 很好的总结

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

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

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

    作者回复: 👍🏻👍🏻

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

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

    2019-05-22
    3
  • leesper
    感觉这就是传说中的Schema-on-read,传统的数据仓库只能存储结构化数据,对于非结构化数据的,后来有了data lake
    2019-08-19
    2
  • 珅剑
    DataSet在需要访问列中的某个字段时是非常方便的,但是如果要写一些适配性很强的函数时,如果使用DataSet,行的类型无法在编译时确定,可能是各种case class,这时候用DataFrame就可以比较好地解决问题
    2019-06-13
    1
  • brv
    dataset是在dateframe基础上发展起来的,那dateset是dateframe的特例
    2019-05-24
    1
  • 朱同学
    大部分情况下用dataset都没问题,限制因素主要是spark版本

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

    2019-05-22
    1
  • RocWay
    老师你好,请教个问题:既然dataframe没有存储具体的类型,那么是否可以认为dataframe具有动态语言的特性?也就是说当数据类型变化后,程序能够自动适应。实现起来可否这样:先判断某个名字的字段是否存在,再做出相应的动作?
    2019-05-22
    1
  • Geek_f65511
    大部分情况都是用dataset和dataframe,rdd的用于操作细节的地方
    2019-12-02
  • wy
    dataframe是dataset的子集,类型是row,所以dataframe适合那些编译阶段无法确定字段数量和类型的查询,dataset适用那些编译阶段就明确知道字段详细详细信息的场景。
    2019-11-24
  • 王翔宇🍼
    何时检测分析错误 的分析错误是指什么?
    2019-07-12
    1
  • 西北偏北
    Rdd是spark最底层的核心数据结构,但直接使用rdd的门槛较高,你得知道那些地方可以优化,比如filter要写在group之前。如若不然,写出来的计算,性能其差。


    并且rdd没有字段类型名称信息,字段的获取和处理难度较高。


    推荐使用spark sql更顶层,提供了schema信息,提供了对查询的优化。
    2019-07-11
  • linuxfans
    Dataset具有类型信息,而Dataframe没有,所以当我们要处理类型化数据,例如数值型时,用Dataset更方便。理论上,Dataframe可以用在Dataset的所有地方,只是字段类型要在程序中自己处理。
    2019-06-16
  • CoderLean
    实际上如果只是因为hive的不足,为什么不用impala代替,性能也比sparklsql高
    2019-06-04
  • Geek_f406a1
    请问作者 "还兼容多种数据格式,包括 Hive、RDD、JSON 文件" 这句话中hive是一种数据格式么?
    2019-05-30
    1
  • AF
    1. 对于读写Hive时,适合用Dataframe,可以认为df就是一张表。
    2. 对于要操作元组或者case class或者csv等文件时,适合用Dataset,因为是强类型的
    2019-05-22
收起评论
17
返回
顶部