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快速入门(进阶)
相关文章
|
1月前
|
SQL 分布式计算 Java
Spark SQL向量化执行引擎框架Gluten-Velox在AArch64使能和优化
本文摘自 Arm China的工程师顾煜祺关于“在 Arm 平台上使用 Native 算子库加速 Spark”的分享,主要内容包括以下四个部分: 1.技术背景 2.算子库构成 3.算子操作优化 4.未来工作
|
3月前
|
SQL JSON 分布式计算
【赵渝强老师】Spark SQL的数据模型:DataFrame
本文介绍了在Spark SQL中创建DataFrame的三种方法。首先,通过定义case class来创建表结构,然后将CSV文件读入RDD并关联Schema生成DataFrame。其次,使用StructType定义表结构,同样将CSV文件读入RDD并转换为Row对象后创建DataFrame。最后,直接加载带有格式的数据文件(如JSON),通过读取文件内容直接创建DataFrame。每种方法都包含详细的代码示例和解释。
|
4月前
|
SQL 安全 数据挖掘
牛客网刷题之SQL篇:非技术快速入门39T
这篇文章是关于牛客网上的SQL刷题教程,涵盖了基础的SQL运算符和多个实际的数据分析场景,旨在帮助非技术人员快速入门SQL。
262 0
牛客网刷题之SQL篇:非技术快速入门39T
|
4月前
|
SQL 分布式计算 大数据
大数据-97 Spark 集群 SparkSQL 原理详细解析 Broadcast Shuffle SQL解析过程(一)
大数据-97 Spark 集群 SparkSQL 原理详细解析 Broadcast Shuffle SQL解析过程(一)
131 0
|
4月前
|
SQL 分布式计算 算法
大数据-97 Spark 集群 SparkSQL 原理详细解析 Broadcast Shuffle SQL解析过程(二)
大数据-97 Spark 集群 SparkSQL 原理详细解析 Broadcast Shuffle SQL解析过程(二)
125 0
|
4月前
|
SQL 分布式计算 Java
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
105 0
|
SQL 消息中间件 分布式计算
通过Spark SQL实时归档SLS数据
我在前一篇文章介绍过基于Spark SQL实现对HDFS操作的实时监控报警。今天,我再举例说明一下如何使用Spark SQL进行流式应用的开发。
2580 0
|
5月前
|
关系型数据库 MySQL 网络安全
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
|
7月前
|
SQL 存储 监控
SQL Server的并行实施如何优化?
【7月更文挑战第23天】SQL Server的并行实施如何优化?
182 13
|
7月前
|
SQL
解锁 SQL Server 2022的时间序列数据功能
【7月更文挑战第14天】要解锁SQL Server 2022的时间序列数据功能,可使用`generate_series`函数生成整数序列,例如:`SELECT value FROM generate_series(1, 10)。此外,`date_bucket`函数能按指定间隔(如周)对日期时间值分组,这些工具结合窗口函数和其他时间日期函数,能高效处理和分析时间序列数据。更多信息请参考官方文档和技术资料。
109 9