:SparkSQL 概述

Posted 黑马程序员官方

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了:SparkSQL 概述相关的知识,希望对你有一定的参考价值。

Spark是大数据体系的明星产品,是一款高性能的分布式内存迭代计算框架,可以处理海量规模的数据。下面就带大家来学习今天的内容!

 往期内容:


一、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 概述的主要内容,如果未能解决你的问题,请参考以下文章

spark SQL概述

spark-sql的概述以及编程模型的介绍

Spark学习之路 (二十)SparkSQL的元数据

Spark SQL概述

SparkSQL

SparkSQL 之旅