:SparkSQL 概述
Posted 黑马程序员官方
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了:SparkSQL 概述相关的知识,希望对你有一定的参考价值。
Spark是大数据体系的明星产品,是一款高性能的分布式内存迭代计算框架,可以处理海量规模的数据。下面就带大家来学习今天的内容!
往期内容:
- Spark基础入门-第一章:Spark 框架概述
- Spark基础入门-第二章:Spark环境搭建-Local
- Spark基础入门-第三章:Spark环境搭建-StandAlone
- Spark基础入门-第四章:Spark环境搭建-StandAlone-HA
- Spark基础入门-第五章:环境搭建-Spark on YARN
- Spark基础入门-第六章:PySpark库
- Spark基础入门-第七章:本机开发环境搭建
- Spark基础入门-第八章:分布式代码执行分析
- Spark Core-第一章: RDD详解
- Spark Core-第三章:RDD的持久化
- Spark Core-第四章:Spark案例练习
- Spark Core-第五章:共享变量
- Spark Core-第六章:Spark 内核调度
- SparkSQL-第一章:SparkSQL快速入门
一、SparkSQL和Hive的异同
- Hive和Spark 均是:“分布式SQL计算引擎”
- 均是构建大规模结构化数据计算的绝佳利器,同时SparkSQL拥有更好的性能
- 目前,企业中使用Hive仍旧居多,但SparkSQL将会在很近的未来替代Hive成为分布式SQL计算市场的顶级
二、SparkSQL的数据抽象
Pandas - DataFrame
- 二维表数据结构
- 单机(本地)集合
SparkCore - RDD
- 无标准数据结构,存储什么数据均可
- 分布式集合(分区)
SparkSQL - DataFrame
- 二维表数据结构
- 分布式集合(分区)
SparkSQL 其实有3类数据抽象对象
- SchemaRDD对象(已废弃)
- DataSet对象:可用于Java、Scala语言
- DataFrame对象:可用于Java、Scala、 Python 、 R
我们以Python开发SparkSQL,主要使用的就是 DataFrame对象作为核心数据结构
三、SparkSQL数据抽象的发展
从SparkSQL的发展历史可以看到:
- 14年最早的数据抽象是: SchemaRDD (内部存储二维表数据结构的RDD), SchemaRDD就是魔改的RDD,将RDD支持的存储数据,限定 为二维表数据结构用以支持SQL查询。由于是魔改RDD,只是一个过渡产品,现已废弃。
- 15年发布DataFrame对象,基于Pandas的DataFrame (模仿)独立于RDD进行实现,将数据以二维表结构进行存储并支持分布式运行
- 16年发布DataSet对象,在DataFrame之上添加了泛型的支持,用以更好的支持Java和Scala这两个支持泛型的编程语言
- 16年, Spark2.0版本,将DataFrame和DataSet进行合并。其底层均是DataSet对象,但在Python和R语言到用时,显示为DataFrame对象 。和老的DataFrame对象没有区别
四、DataFrame概述
DataFrame和RDD都是:弹性的、分布式的、数据集只是, DataFrame存储的数据结构“限定”为:二维表结构化数据,而RDD可以存储的数据则没有任何限制,想处理什么就处理什么。
五、SparkSession对象
在RDD阶段,程序的执行入口对象是: SparkContext
在Spark 2.0后,推出了SparkSession对象, 作为Spark编码的统一入口对象。
SparkSession对象可以:
- - 用于SparkSQL编程作为入口对象
- - 用于SparkCore编程,可以通过SparkSession对象中获取到SparkContext
所以,我们后续的代码,执行环境入口对象,统一变更为SparkSession对象。
现在,来体验一下构建执行环境入口对象:SparkSession
构建SparkSession核心代码
# coding:utf8
# SparkSQL 中的入口对象是SparkSession对象
from pyspark.sql import SparkSession
if __name__ == '__main__':
# 构建SparkSession对象, 这个对象是 构建器模式 通过builder方法来构建 spark = SparkSession.builder.\\
appName("local[*]").\\
config("spark.sql.shuffle.partitions", "4").\\
getOrCreate()
# appName 设置程序名称, config设置一些常用属性
# 最后通过getOrCreate()方法 创建SparkSession对象
六、SparkSQL HelloWorld 演示
有如下数据集:列1ID,列2学科, 列3分数
数据集文件:资料\\data\\sql\\stu_score.txt
注意:右侧代码同学们不需要练习, 只是先体验一下SparkSQL的数据处理
需求:读取文件,找出学科为“语文”的数据,并限制输出5条,where subject = '语文' limit 5
代码如下:
# coding:utf8
# SparkSQL 中的入口对象是SparkSession对象
from pyspark.sql import SparkSession
if __name__ == '__main__':
# 构建SparkSession对象, 这个对象是 构建器模式 通过builder方法来构建
spark = SparkSession.builder.\\
appName("local[*]").\\
config("spark.sql.shuffle.partitions", "4").\\
getOrCreate()
# appName 设置程序名称, config设置一些常用属性
# 最后通过getOrCreate()方法 创建SparkSession对象
df = spark.read.csv('../data/sql/stu_score.txt', sep=',', header=False)
df2 = df.toDF('id', 'name', 'score')
df2.printSchema()
df2.show()
df2.createTempView("score")
# SQL 风格
spark.sql("""
SELECT * FROM score WHERE name='语文' LIMIT 5
""").show()
# DSL 风格
df2.where("name='语文'").limit(5).show()
以上是关于:SparkSQL 概述的主要内容,如果未能解决你的问题,请参考以下文章