Spark SQL 前世今生

Spark SQL是Spark上运行SQL的模块
Hive on Spark是在Hive的基础上添加了Spark的执行引擎
两者是不同的
metastore,元数据,比如表的名字、表存在的位置、有哪些字段、顺序类型等等。存储在MySQL里面。好处是在Hive创建了表,Spark SQL可以访问,反之亦然,因为创建都是独立的。

Spark SQL 概述

Spark SQL是Spark中用来处理结构化数据的一个模块。

  1. 集成的
    能够使用SQL或者Dataframe API 查询结构化数据。
  2. 统一的数据访问
    能够使用相同的方式连接任何的数据源。
    Dataframe 和 SQL 提供了能够连接数据源的共同方式。包含(Hive,Avro,Parquet,ORC,JSON和JDBC等)
  3. 能够很好地与Hive进行集成
    在已经存在的数据仓库中执行 SQL 和 HQL的查询。
  4. 标准的 Connectivity
    通过 JDBC 或者 ODBC来连接 BI 工具

    Hive、Spark SQL 都不仅仅是SQL


Spark SQL 架构

其中前端是sql语言或者spark program代码或者Streaming SQL,通过Catalyst进行优化和转换,传给后端Spark引擎进行运算。
SQL =》 抽象语法树 =》 逻辑执行计划 =》 优化后的逻辑执行计划 =》 物理执行计划 =》 优化后的物理执行计划 =》 Spark引擎

Dataframe / Dataset 详解

pandas 和 R 中的 Dataframe 是单机版,而 Spark SQL 中的 Dataframe 是分布式的,区别就在这里。

Dataset 是一个分布式的数据的集合,在Spark1.6中添加。Python不支持Dataset API。仅仅支持 Scala 和 Java。

Dataframe 是以列的形式构成分布式数据集,和关系型数据库的表类似

Spark SQL 编程

Spark SQL 的入口是 SparkSession


从已有的数据源创建 Dataframe
查看 Dataframe 的信息


df select 可以选择多个列,然后用show进行展示


还可以像pandas中一样用 df[‘name’]的方式访问列

filter 和 groupby 函数

注册临时表,并使用SQL语句进行查询

创建全局视图,用的不是很多
需要加上global_temp标识

Dataframe 与RDD进行转换

  1. 使用反射机制,推导出数据类型
  2. 编程指定Schema

    1中方式,以后编程按照模板写就行了

2中方式

比较来说是第二种比较灵活,但是代码量稍多,推荐第二种