Spark SQL(一)—— Spark SQL介绍

师赤岩
2023-12-01

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。
 类似资料: