1. 首先什么是SparkSQL?

  • Spark SQL是Spark用来处理结构化数据的一个模块,它提供了一个编程抽象叫做DataFrame并且作为分布式SQL查询引擎的作用。
  • 有多种方式去使用Spark SQL,包括SQL、DataFrames API和Datasets API。但无论是哪种API或者是编程语言,它们都是基于同样的执行引擎
  • 它是将Spark SQL转换成RDD,然后提交到集群中去运行,执行效率非常快!

2. SparkSQL的几大特性:

  • 易整合: 将sql查询与spark程序无缝混合,可以使用java、scala、python、R等语言的API操作。
  • 统一的数据访问: 以相同的方式连接到任何数据源。
  • 兼容Hive: 支持Hive HQL的语法,兼容hive(元数据库、SQL语法、UDF、序列化、反序列化机制)。
  • 标准的数据连接: 可以使用行业标准的JDBC或ODBC连接。

Spark里面的RDD结果如何转为键值对 spark rdd sql_SQL

SparkSQL模块官方文档

3. SparkSQL的概述

简介:Spark SQL允许开发人员直接处理RDD,同时可以查询在Hive上存储的外部数据。Spark SQL的一个重要特点就是能够统一处理关系表和RDD,使得开发人员可以轻松的使用SQL命令进行外部查询,同时进行更加复杂的数据分析

发展历程:

Spark里面的RDD结果如何转为键值对 spark rdd sql_SQL_02

关系:

Spark里面的RDD结果如何转为键值对 spark rdd sql_SQL_03


SparkSQL发展:

  • 1-Hive(慢-底层基于MapReduce-Tez-Spark)
  • 2-Shark(底层执行引擎Spark,大量冗余的Hive代码)
  • 3-SparkSQL(重新设计了SQL的执行流程,200种优化)
  • Spark3.0中有大量SQL的改变
3.1 DataFrame

Spark里面的RDD结果如何转为键值对 spark rdd sql_SQL_04

  • 总结:
    DataFrame ==> RDD - 泛型 + Schema + 方便的SQL操作 + 优化
    DataFrame是特殊的RDD
    DataFrame是一个分布式的表
3.2 DataSet

Spark里面的RDD结果如何转为键值对 spark rdd sql_Hive_05


Spark里面的RDD结果如何转为键值对 spark rdd sql_泛型_06

● 总结:
Dateset ==> DataFrame + 泛型
Dateset ==> RDD + Schema + 方便的SQL操作 + 优化
Dateset是特殊的DataFrame、DataFrame是特殊的RDD
Dateset是一个分布式的表

3.3 RDD、DataFrame、DataSet的区别
  • 三者结构图解
  • Spark里面的RDD结果如何转为键值对 spark rdd sql_Hive_07

  • 数据图解
  • 总结:
  1. DataFrame = RDD - 泛型 + Schema + SQL + 优化
  2. DataSet = DataFrame + 泛型
  3. DataSet = RDD + Schema + SQL + 优化
  4. DataFrame = DataSet[Row]

4. SparkSQL与HiveSQL的关系

  • Hive(SQL on Hadoop)是大数据生态系统中第一个SQL框架,架构如下所示:
  • Spark里面的RDD结果如何转为键值对 spark rdd sql_Hive_08

  • 底层依赖的MapReduce 所以计算起来很慢
  • Shark(Hive on Spark),把HQL翻译成Spark上对应的RDD操作,Shark继承了大量的Hive代码
  • Spark里面的RDD结果如何转为键值对 spark rdd sql_SQL_09

  • 基于前面的问题诞生了SparkSQL(新的技术都是基于就得技术有问题才诞生的)
  • Spark里面的RDD结果如何转为键值对 spark rdd sql_泛型_10


  • Spark里面的RDD结果如何转为键值对 spark rdd sql_泛型_11

  • 数据结构: DataFrame和DataSet