【Spark】(七)Spark SQL 应用解析

本文介绍了Spark SQL的核心组件和作用,重点讲解了DataFrame和DataSet的概念及其创建方法。Spark SQL提供DataFrame作为结构化数据处理的抽象,而DataSet是Spark的最新数据抽象,具有更强大的类型检查和优化。文章还探讨了SparkSession作为Spark 2.x的统一入口点,以及如何从RDD转换为DataFrame和DataFrame转换回RDD。
摘要由CSDN通过智能技术生成

认识Spark SQL

1、什么是Spark SQL?

Spark SQL是Spark的核心组件之一,主要用于进行结构化数据的处理。它提供的最核心的编程抽象就是DataFrame。
在这里插入图片描述

2、Spark SQL的作用

提供一个编程抽象(DataFrame) 并且作为分布式 SQL 查询引擎
DataFrame:它可以根据很多源进行构建,包括:结构化的数据文件,hive中的表,外部的关系型数据库,以及RDD

3、运行原理

将 Spark SQL 转化为 RDD, 然后提交到集群执行

4、特点

(1)容易整合
(2)统一的数据访问方式
(3)兼容 Hive
(4)标准的数据连接

5、Spark SQL数据抽象

RDD (Spark1.0) -> DataFrame (Spark1.3) -> DataSet ( Spark1. 6)

  • Spark SQL提供了DataFrame和DataSet的数据抽象。
  • DataFrame就是RDD + Schema,可以认为是一张二维表格。 他的劣势是在编译器不进行表格中的字段的类型检查。在运行期进行检查。
  • DataSet是 Spark最新的数据抽象, Spark的发 展会逐步将DataSet作为主要的数据抽象,弱化RDD和DataFrame。 DataSet包含了DataFr ame所有的优化机制。除此之外提供了以样例类为Schema模型的强类型。
  • DataFrame = DataSet [Row]
  • DataFrame和DataSet都有可控的内存管理机制,所有数据都保存在非堆上,都使用了catalyst进行SQL的优化。

在这里插入图片描述

Spark SQL API

1、SparkContext

2、SQLContext

Spark SQL的编程入口

3、HiveContext

SQLContext的子集,包含更多功能

4、SparkSession(Spark 2.x推荐)

SparkSession:合并了SQLContext与HiveContext
提供与Spark功能交互单一入口点,并允许使用DataFrame和Dataset API对Spark进行编程
在这里插入图片描述
注:

  • 1、无特殊说明时,下文中“spark”均指SparkSession实例
  • 2、如果是spark-shell下,会自动创建“sc”和“spark”

SparkSession 是 Spark 2.0引入的新概念。SparkSession为用户提供了统一的切入点,来让用户学习spark的各项功能。
在spark的早期版本中,SparkContext 是 spark的主要切入点,由于RDD是主要的API,我们通过sparkcontext来创建和操作RDD。对于每个其他的API,我们需要使用不同的context。例如,对于Streming,我们需要使用 StreamingContext ;对于sql,使用 sqlContext ;对于Hive,使用 hiveContext 。
但是随着DataSet 和 DataFrame的API逐渐成为标准的API,就需要为他们建立接入点。所以在spark2.0中,引入SparkSession作为DataSet和DataFrameAPI 的切入点,SparkSession封装了SparkConf、SparkContext和SQLContext。为了向后兼容,SQLContext和HiveContext也被保存下来。

SparkSession 实质上是 SQLContext 和 HiveContext 的组合(未来可能还会加上 StreamingContext),所以在 SQLContext 和 HiveContext 上可用的 API 在 SparkSession 上同样是可以使用的。SparkSession 内部封装了 SparkContext,所以计算实际上是由 SparkContext 完成的。

特点:

  • 为用户提供一个统一的切入点使用Spark 各项功能
  • 允许用户通过它调用 DataFrame 和 Dataset 相关 API 来编写程序
  • 减少了用户需要了解的一些概念,可以很容易的与 Spark 进行交互
  • 与 Spark 交互之时不需要显示的创建 SparkConf, SparkContext 以及 SQlContext,这些对象已经封闭在 SparkSession 中

5、Dateset

特定域对象中的强类型集合

5.1 创建Dateset

createDataset()的参数可以是:Seq、Array、RDD

spark.createDataset(1 to 3).show

在这里插入图片描述

spark.createDataset(List(("a",1),("b",2),("c",3))).show

在这里插入图片描述

spark.createDataset(sc.parallelize(List(("a",1,1),("b",2,2)))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值