Spark SQL快速入门(基础)

简介: Spark SQL快速入门(基础)

0x00 教程内容


  1. Spark SQL相关概念
  2. Spark SQL 实战初体验


0x01 Spark SQL相关概念


1. Spark SQL介绍

Spark SQL 作为 Spark 四大核心组件之一,主要用于处理结构化数据或半结构化数据,它支持在Spark 中使用 SQL 对数据进行查询,还可以从各种外部数据源中导入数据并将其进行处理。它会提供底层的优化操作让我们更加关注于具体的数据操作,而非底层运行细节。在处理大量的数据操作时表现得非常优秀。


处理数据

通过 Spark SQL 我们可以像平时使用 SQL 语句去分析关系型数据库表一样去对 Spark 上的海量数据进行快速分析与处理,我们只需专注数据分析的逻辑而不需要担心底层分布式存储、计算、通信、以及作业解析和调度的细节。


多种数据源

Spark SQL 支持从 JSON 文件、CSV 文件、Hive 表、Parquest 文件等中读取数据,可以通过 SQL 语句对数据进行交互式查询;也可以读取传统关系型数据库中的数据进行分析。同时还能与传统的 RDD 编程相结合,让我们能够同时使用 SQL 和 RDD进行复杂的数据分析。


与Spark生态其他组件完美搭配

Spark SQL 还能与其它核心组件比如: Spark Streaming、MLlib、GraphX等结合使用,天生兼容完美搭配,发挥强大性能, Spark SQL的作用是非常大的。


2. DataFrame介绍

DataFrame 是 Spark SQL 的核心数据抽象。对于输入的待处理数据,我们既可以将其转化为 DataFrame,然后通过调用 DataFrame API 的方式进行处理;也可以将 DataFrame 注册成临时表,在临时表上直接使用SQL进行数据查询。


此处需要注意的是 DataFrame 与 RDD 之间的区别:RDD 是整个 Spark 平台的一种基本通用的数据抽象,它更具有通用性,适用于各类数据源,无论是结构化数据、半结构化数据或非结构化数据都会被统一的转化为由同一元素组成的 RDD,在RDD层面上,其实是并不了解每一条数据的内容是什么的;而 DataFrame 是只针对结构化数据源的高层数据抽象,它能够提取出数据特定的结构信息,进而能够更加高效的处理结构化数据。


其实,RDD可以理解为是一列多行的数据结构,而DataFrame可以理解为是多列多行的数据结构。具体请看下面这张图:


image.png


RDD只知道这一行数据是什么内容,比如是Person,而DataFrame则有特定的结构,具体知道每一列是什么内容。


0x02 Spark SQL 实战初体验


1. 数据准备

cd /home/hadoop-sny/datas

vi teacher.json


{"name":"shaonaiyi", "age":"30", "height":198}
{"name":"shaonaier", "age":"28", "height":174}
{"name":"shaonaisan", "age":"25", "height":178}
{"name":"shaonaisi", "age":"21", "height":183}
{"name":"shaonaiwu", "age":"32", "height":165}


image.png


各字段意思:

name —> 名称
age —> 年龄
height —> 身高


2. Spark SQL初体验

a. 启动 Spark Shell

spark-shell


image.png


b. 创建 SparkSession对象


Spark SQL 编程主入口点是:SparkSession,我们可以通过SparkSession的builder()方法创建一个基本的SparkSession 对象,并配置一些初始化参数。


在 spark-shell 中输入如下代码:


import org.apache.spark.sql.SparkSession
val spark = SparkSession.builder().appName("PersonApp").getOrCreate()
// 引入包用于把 RDD 隐式转换为 DataFrame
import spark.implicits._


image.png


其中,我们也可以在SparkSession后面调用config方法设置相关属性信息,使用示例:

val spark = SparkSession
  .builder()
  .appName("PersonApp")
  .config("spark.some.config.option", "some-value")
  .getOrCreate()


c. 创建 DataFrames对象

应用程序根据上一步创建的 SparkSession 对象提供的 API,可以从现有的 RDD 或其它结构化数据源中创建 DataFrame 对象。

在本例中我们从 JSON 文件创建 DataFrame:


// 创建DataFrame,指明来源自JSON文件
val teacherDF = spark.read.json("/home/hadoop-sny/datas/teacher.json")

image.png


其实teacherDF可以来自各种不同的数据源,但原理都类似,调用不同的创建函数去连接数据源。


下面的步骤中我们将对创建的 DataFrame 进行操作。


d. 对DataFrame进行操作


我们开始对teacherDF进行处理,处理的方式类似 SQL 操作。


首先打印当前 DataFrame 里的内容:


teacherDF.show()


image.png


除了此操作,其他很多操作,将会在下一篇教程中说到。


0xFF 总结


  1. 本篇教程简单地介绍了Spark SQL的相关概念,并且初步体验了一下Spark SQL,其实Spark SQL底层也是依赖于 RDD的,重点在于 DataFrame 理解。
  2. 下一篇会更加详细地介绍Spark SQL的相关操作,请参考教程:Spark SQL快速入门(进阶)
相关文章
|
5月前
|
设计模式 SQL 分布式计算
Spark Day06:Spark Core之Spark 内核调度和SparkSQL快速入门
Spark Day06:Spark Core之Spark 内核调度和SparkSQL快速入门
43 0
|
5月前
|
SQL 分布式计算 数据挖掘
Spark_Day07:Spark SQL(DataFrame是什么和数据分析(案例讲解))
Spark_Day07:Spark SQL(DataFrame是什么和数据分析(案例讲解))
77 0
|
4月前
|
存储 SQL 分布式计算
性能优化:Spark SQL中的谓词下推和列式存储
性能优化:Spark SQL中的谓词下推和列式存储
|
4月前
|
SQL 分布式计算 测试技术
使用UDF扩展Spark SQL
使用UDF扩展Spark SQL
|
4月前
|
SQL 数据采集 分布式计算
Spark SQL中的聚合与窗口函数
Spark SQL中的聚合与窗口函数
|
4月前
|
SQL JSON 分布式计算
Spark SQL简介与基本用法
Spark SQL简介与基本用法
|
4月前
|
SQL 分布式计算 数据处理
Spark的生态系统概览:Spark SQL、Spark Streaming
Spark的生态系统概览:Spark SQL、Spark Streaming
|
5月前
|
SQL 分布式计算 Java
Spark 基础教程:wordcount+Spark SQL
Spark 基础教程:wordcount+Spark SQL
34 0
|
SQL 消息中间件 分布式计算
通过Spark SQL实时归档SLS数据
我在前一篇文章介绍过基于Spark SQL实现对HDFS操作的实时监控报警。今天,我再举例说明一下如何使用Spark SQL进行流式应用的开发。
2500 0
|
19天前
|
SQL 人工智能 算法
【SQL server】玩转SQL server数据库:第二章 关系数据库
【SQL server】玩转SQL server数据库:第二章 关系数据库
61 10

热门文章

最新文章