文章目录

  • 1. 什么是 Spark SQL
  • 2. 特点
  • 3. 为什么要学习Spark SQL
  • 4. 核心的概念:表(DataFrame 或 Dataset)


1. 什么是 Spark SQL

Spark SQL is Apache Spark’s module for working with structured data.

  • Spark SQL是Spark用来处理结构化数据的一个模块。在 Spark SQL 中,不能处理非结构化的数据。
  • 它提供了一个编程抽象叫做DataFrame并且作为分布式SQL查询引擎的作用。

2. 特点

  • 容易集成
    安装Spark的时候,已经集成好了,不需要单独安装。
  • 统一的数据访问方式
    结构化数据的类型:JDBC,JSON,Hive,Parquet文件
    对于不同的数据源,只要读取进来,生成DataFrame后,使用SQL语句操作即可。
  • 完全兼容Hive
    可以直接将Hive中的数据,读取到Spark SQL 中处理。(Hive默认的执行引擎是将SQL转成MapReduce,但Hive2.x可以将执行引擎配成Spark的。但是一般Hive不常作为计算来用,一般还是用作数据仓库。)
  • 支持标准的数据连接
    JDBC,ODBC

3. 为什么要学习Spark SQL

  • Spark SQL 基于Spark,效率比Hive高
    Hive是将Hive SQL转换成MapReduce然后提交到集群上执行,大大简化了编写MapReduce的程序的复杂性,但MapReduce这种计算模型执行效率比较慢。而Spark SQL是将Spark SQL转换成RDD,然后提交到集群执行,执行效率非常快。
  • 同时Spark SQL也支持从Hive中读取数据

4. 核心的概念:表(DataFrame 或 Dataset)

表 = 表结构 + 数据

  • DataFrame
  • DataFrame = Schema (case class) + RDD(数据)
    DataFrame比RDD多了数据的结构信息,即Schema。
  • RDD是分布式的Java对象的集合。DataFrame是分布式的Row对象的集合。
  • DataFrame除了提供了比RDD更丰富的算子以外,更重要的特点是提升执行效率、减少数据读取以及执行计划的优化。
  • DataFrame API支持的语言有Scala,Java,Python和R。
  • DataFrames可以从各种来源构建,如结构化数据文件,Hive中的表,外部数据库或现有RDDs。
  • 缺乏编译时类型安全。
  • Dataset
  • Dataset 是 Spark 1.6 之后,对 DataFrame做的一个封装。为了解决DataFrame缺乏编译时类型安全这个问题。
  • Dataset是数据的分布式集合。Dataset是在Spark 1.6中添加的一个新接口,是DataFrame之上更高一级的抽象。它提供了RDD的优点(强类型化,使用强大的lambda函数的能力)以及Spark SQL优化后的执行引擎的优点。一个Dataset 可以从JVM对象构造,然后使用函数转换(map, flatMap,filter等)去操作。
  • Dataset API 支持Scala和Java,不支持Python。