一、SparkSQL介绍

   Hive是Shark的前身,Shark是SparkSQL的前身,SparkSQL产生的根本原因是其完全脱离了Hive的限制。

  • SparkSQL支持查询原生的RDD。 RDD是Spark平台的核心概念,是Spark能够高效的处理大数据的各种场景的基础。
  • 能够在Scala中写SQL语句。支持简单的SQL语法检查,能够在Scala中写Hive语句访问Hive数据,并将结果取回作为RDD使用。

Spark on Hive和Hive on Spark:

  1. Spark on Hive: Hive只作为储存角色,Spark负责sql解析优化,执行。
  2. Hive on Spark:Hive即作为存储又负责sql的解析优化,Spark负责执行。

Spark之SparkSQL和DataFrame

二、DataFrame

Spark之SparkSQL和DataFrame

DataFrame也是一个分布式数据容器。与RDD类似,然而DataFrame更像传统数据库的二维表格,除了数据以外,还掌握数据的结构信息,即schema同时,与Hive类似,DataFrame也支持嵌套数据类型(struct、array和map)。从API易用性的角度上 看, DataFrame API提供的是一套高层的关系操作,比函数式的RDD API要更加友好,门槛更低。

DataFrame的底层封装的是RDD,只不过RDD的泛型是Row类型。

SparkSQL的数据源:

SparkSQL的数据源可以是JSON类型的字符串,JDBC,Parquent,Hive,HDFS等。

Spark之SparkSQL和DataFrame

SparkSQL底层架构:

首先拿到sql后解析一批未被解决的逻辑计划,再经过分析得到分析后的逻辑计划,再经过一批优化规则转换成一批最佳优化的逻辑计划,再经过SparkPlanner的策略转化成一批物理计划,随后经过消费模型转换成一个个的Spark任务执行。

Spark之SparkSQL和DataFrame

谓词下推(predicate Pushdown):SparkSQL优化job,使用到了谓词下推

Spark之SparkSQL和DataFrame

三、创建DataFrame的几种方式

Spark之SparkSQL和DataFrame

相关文章: