Spark从入门到精通23:Spark SQL简介

Spark SQL是Spark专门用来处理结构化数据的一个模块,它提供了一个名为DataFrame的编程抽象,并且可以作为分布式SQL查询引擎来使用。本节就来介绍一下Spark SQL的相关知识。

1.为什么要学习Spark SQL?

我们知道Hive是Hadoop生态中的一个数据分析引擎,它可以将Hive SQL转换成MapReduce任务提交到Hadoop集群中执行,大大简化了编写MapReduce程序的复杂性,并且从Hive-2.x版本以后推荐使用Spark作为Hive底层的数据处理引擎。但是由于MapReduce程序的执行效率比Spark程序慢的多,所以Spark SQL应运而生。Spark SQL是将Spark SQL查询转化为RDD,然后提交到Spark集群中执行,执行速度非常快!同时Spark SQL也支持从Hive中读取数据。

2.Spark SQL的特点

Spark SQL的特点主要有以下几个方面:

  1. 容易整合:很容易将SQL查询与Spark程序混合使用;
  2. 统一的数据访问方式:使用同样的方式连接到任意数据源;
  3. 兼容Hive:在既存的数据上执行不修改的Hive查询;
  4. 标准的数据库连接方式:JDBC和ODBC等。

3.Spark的数据模型

3.1DataFrame

DataFrame是组织成命名列的数据集,换言之,DataFrame是带结构的RDD。DataFrame等同于关系型数据库中的表,但是在底层有更丰富的优化。DataFrame可以从各种数据源构建:结构化数据文件、Hive中的表、外部数据库、或者现有的RDD等。

DataFrame API支持的语言有Scala、Java、Python和R。

DataFrame = Schema + RDD的关系可以从下图看出:

image

DataFrame底层就是RDD,只是比RDD多了数据的结构信息,即schema。RDD是分布式的Java对象的集合。DataFrame是分布式的Row对象的集合。DataFrame除了提供了比RDD更丰富的算子以外,更重要的特点是提升执行效率、减少数据读取、执行计划的优化等。

3.2Dataset

Dataset是数据的分布式集合。Dataset是在Spark1.6之后添加的一套新的编程接口API,是在DataFrame更高一层的数据抽象。它具有RDD的优点(强类型化,使用强大的lambda函数的能力)以及Spark SQL优化后的执行引擎的优点。一个Dataset可以从JVM对象构造,然后使用函数转换(map,flatMap,filter等)去操作。Dataset API支持Scala和Java,不支持Python。

你可能感兴趣的:(Spark从入门到精通23:Spark SQL简介)