美文网首页
SparkSQL学习

SparkSQL学习

作者: 大芒果er | 来源:发表于2018-09-20 11:19 被阅读236次

简介

        Spark SQL 的前身是 shark,Shark 是基于 Spark 计算框架之上且兼容 Hive 语法的 SQL 执 行引擎,由于底层的计算采用了 Spark,性能比 MapReduce 的 Hive 普遍快 2 倍以上,当数 据全部 load 在内存的话,将快 10 倍以上,因此 Shark 可以作为交互式查询应用服务来使 用。除了基于 Spark 的特性外,Shark 是完全兼容 Hive 的语法,表结构以及 UDF 函数等, 已有的 HiveSql 可以直接进行迁移至 Shark 上。Shark 底层依赖于 Hive 的解析器,查询优化 器,但正是由于 Shark 的整体设计架构对 Hive 的依赖性太强,难以支持其长远发展,比如 不能和 Spark 的其他组件进行很好的集成,无法满足 Spark 的一栈式解决大数据处理的需求 Hive 是 Shark 的前身,Shark 是 SparkSQL 的前身,相对于 Shark,SparkSQL 有什么优势 呢?

- SparkSQL 产生的根本原因,是因为它完全脱离了 Hive 的限制 

- SparkSQL 支持查询原生的 RDD,这点就极为关键了。RDD 是 Spark 平台的核心概念, 是 Spark 能够高效的处理大数据的各种- 场景的基础 

- 能够在 Scala 中写 SQL 语句。支持简单的 SQL 语法检查,能够在 Scala 中写 Hive 语句访 问 Hive 数据,并将结果取回作为 RDD 使用 

Spark 和 Hive 有两种组合 

Spark on Hive:

        Hive 只是作为了存储的角色

        SparkSQL 作为计算的角色 

Hive on Spark: 

        Hive 承担了一部分计算(解析 SQL,优化 SQL...)的和存储 

        Spark 作为了执行引擎的角色

Dataframe 

        Spark SQL 是 Spark 的核心组件之一,于 2014 年 4 月随 Spark 1.0 版一同面世,在 Spark 1.3 当中,Spark SQL 终于从 alpha(内测版本)阶段毕业。Spark 1.3 更加完整的表达了 Spark SQL 的愿景:让开发者用更精简的代码处理尽量少的数据,同时让 Spark SQL 自动优化执行 过程,以达到降低开发成本,提升数据分析执行效率的目的。与 RDD 类似,DataFrame 也 是一个分布式数据容器。然而 DataFrame 更像传统数据库的二维表格,除了数据以外,还 掌握数据的结构信息,即 schema。同时,与 Hive 类似,DataFrame 也支持嵌套数据类型 (struct、array 和 map)。从 API 易用性的角度上看,DataFrame API 提供的是一套高层的 关系操作,比函数式的 RDD API 要更加友好,门槛更低。

RDD VS DataFrame

DataFrame = SchemaRDD = RDD<ROW>


DataFrame 创建方式

1. 读 JSON 文件(不能嵌套)

2. JSON 格式的 RDD 转为 DataFrame

3. 非 JSON 格式的 RDD 转为 DataFrame

- 反射的方式

- 动态创建 Schema

- 读取 MySQL 中的数据来创建 DataFrame

- 读取 Hive 中的数据创建一个 DataFrame(Spark on Hive)

DataFrame 数据存储

1. 存储到 hive 表中

2. 存储到 MySQL/HBase/Redis…中

3. 存储到 parquet 文件(压缩比大,节省空间)中

UDF


UDAF


开窗函数


相关文章

网友评论

      本文标题:SparkSQL学习

      本文链接:https://www.haomeiwen.com/subject/mmmgnftx.html