本书是一本讲解Spark基础应用及编程的实用教程,基于 Spark 2.3 版本,内容包括 Spark 与大数据、构建 Spark 运行环境、开发一个Spark 程序、深入理解 Spark 程序代码、RDD 编程、Spark SQL 结构化数据处理、Spark Streaming、Structured Streaming、SparkR和GraphX。本书总结了Spark 学习的关键点;提出了 Spark 快速学习路线图;提供配套的 Spark前置课程学习资源链接,包括虚拟机、Linux 和 Shell 免费高清视频、《零基础快速入门Scala》免费电子书等,帮助零基础读者迅速夯实Spark基础。
本书配以大量的示例、源代码和注释,可以帮助读者快速、全面而又深入地掌握Spark编程技能。
本书既可作为高等院校大数据、云计算和人工智能相关专业的教材,也可以作为Spark学习者和大数据研发人员的技术参考书。
目 录
前言
第1章 Spark与大数据1
1.1 大数据开发基础1
1.1.1 什么是大数据1
1.1.2 大数据开发的通用步骤2
1.1.3 大数据开发技术4
1.2 初识Spark10
1.2.1 Spark是什么10
1.2.2 Spark的技术特点11
1.3 Spark技术栈12
1.4 Spark重要组件13
1.4.1 Spark Core13
1.4.2 Spark SQL14
1.4.3 GraphX15
1.4.4 流数据处理16
1.4.5 SparkR17
1.4.6 MLlib/ML18
1.4.7 Spark交互工具18
1.5 Spark和Scala19
1.5.1 Scala语言简介19
1.5.2 为什么用Scala开发Spark框架20
1.5.3 为什么用Scala开发Spark程序20
1.5.4 Scala开发Spark程序所涉及的
技术20
1.5.5 Scala语言基础21
1.6 如何快速掌握Spark21
1.6.1 Spark学习的痛点21
1.6.2 Spark快速学习路线图22
1.6.3 Spark学习中的关键点23
1.6.4 利用本书相关资源高效学习Spark23
1.6.5 本书所使用的软件和版本25
1.7 练习25
第2章 构建Spark运行环境26
2.1 Spark程序运行时架构26
2.2 构建Spark大数据运行环境28
2.2.1 构建HDFS28
2.2.2 构建Yarn30
2.2.3 构建Spark集群31
2.3 运行Spark程序(Local方式)31
2.4 运行Spark程序(分布式方式)32
2.4.1 Spark on Yarn32
2.4.2 Spark on Standalone36
2.5 Spark程序在spark-shell上运行41
2.6 使用Web UI监控Spark程序
运行43
2.7 扩展集群节点48
2.8 练习49
第3章 开发一个Spark程序51
3.1 在命令行模式下开发Spark程序51
3.1.1 构建Scala程序编译环境51
3.1.2 使用Vim编写Spark程序53
3.1.3 使用命令编译、打包Spark程序54
3.1.4 运行Spark程序56
3.1.5 使用java命令运行Spark程序57
3.1.6 Spark程序编译、运行、部署的
关键点58
3.2 使用IDEA开发Spark程序58
3.2.1 IDEA安装和基本使用59
3.2.2 使用IDEA编辑Spark代码60
3.2.3 IDEA编译、打包62
3.2.4 IDEA远程提交Spark程序63
3.3 练习64
第4章 深入理解Spark程序代码66
4.1 Spark程序代码结构66
4.2 Spark程序代码的核心概念68
4.2.1 RDD68
4.2.2 Application68
4.2.3 Job69
4.2.4 DAG70
4.2.5 Stage72
4.2.6 Task76
4.2.7 Application、Job、Stage和Task的
并行粒度和并行条件77
4.3 Spark程序代码执行过程77
4.4 练习85
第5章 RDD编程86
5.1 RDD核心概念86
5.1.1 Transformation的基本概念87
5.1.2 Action的基本概念88
5.1.3 Partition的基本概念88
5.2 创建RDD89
5.2.1 使用parallelize/makeRDD
创建RDD89
5.2.2 使用textFile创建RDD91
5.2.3 其他RDD创建操作92
5.3 RDD Partition93
5.3.1 Partition的基本操作94
5.3.2 Partition的分区过程96
5.3.3 Partition和Task98
5.3.4 计算Partition的个数100
5.3.5 Partition的综合应用103
5.4 Transformation操作107
5.4.1 map操作107
5.4.2 flatMap操作111
5.4.3 mapPartitions操作113
5.4.4 join操作115
5.4.5 union操作120
5.4.6 intersection操作121
5.4.7 groupBy操作123
5.4.8 groupByKey操作124
5.4.9 reduceByKey操作125
5.4.10 aggregateByKey操作127
5.4.11 cogroup操作129
5.5 Action操作130
5.5.1 collect操作130
5.5.2 reduce操作130
5.5.3 fold操作131
5.5.4 aggregate操作133
5.5.5 foreachPartition操作134
5.5.6 saveAsTextFile操作135
5.5.7 saveAsObjectFile操作135
5.6 RDD的cache/persist和
checkpoint操作136
5.6.1 cache/persist和checkpoint概述136
5.6.2 cache/persist使用注意事项137
5.6.3 cache/persist操作138
5.6.4 checkpoint操作139
5.7 练习140
第6章 Spark SQL结构化数据处理142
6.1 Spark SQL的核心概念142
6.1.1 结构化数据和非结构化数据142
6.1.2 DataFrame143
6.1.3 Dataset144
6.1.4 Persistent Table和Data
Warehouse145
6.1.5 SQL146
6.1.6 SparkSession147
6.2 Spark SQL数据处理概述147
6.2.1 Spark SQL数据处理环境147
6.2.2 Spark SQL处理结构化数据149
6.2.3 Spark SQL处理不同数据源的
数据150
6.3 构建Spark SQL运行环境150
6.3.1 Spark SQL运行环境概述150
6.3.2 构建最简的Spark SQL运行环境151
6.3.3 构建兼容Hive的Spark SQL运行
环境153
6.4 DataFrame/Dataset快速上手157
6.4.1 DataFrame/Dataset使用概述157
6.4.2 在spark-shell中使用DataFrame/
Dataset157
6.4.3 在代码中使用DataFrame/Dataset161
6.4.4 DataFrame/Dataset使用上的区别163
6.4.5 DataFrame行解析方法164
6.4.6 DataFrame和Dataset转换164
6.5 DataFrame/Dataset与数据源的
转换165
6.5.1 DataFrame/Dataset与数据源的转换
关系和方法概述165
6.5.2 DataFrame/Dataset与Seq的转换167
6.5.3 DataFrame/Dataset与RDD的
转换169
6.5.4 DataFrame/Dataset文件与Sequence
文件的转换170
6.5.5 DataFrame/Dataset与CSV文件的
转换170
6.5.6 DataFrame/Dataset与JSON文件的
转换176
6.5.7 DataFrame/Dataset与ORC文件的
转换178
6.5.8 DataFrame/Dataset与Parquet文件
的转换179
6.5.9 DataFrame/Dataset与Avro文件的
转换182
6.5.10 DataFrame/Dataset与MySQL
数据库的转换183
6.5.11 DataFrame/Dataset与Hive表的
转换188
6.5.12 DataFrame/Dataset与Built-in data
source表的转换193
6.6 DataFrame/Dataset常用API198
6.6.1 Action198
6.6.2 Basic Dataset function200
6.6.3 Typed Transformation205
6.6.4 Untyped Transformation213
6.7 SQL操作223
6.7.1 常用DDL使用说明及示例224
6.7.2 DQL使用说明及示例226
6.7.3 常用DML使用说明及示例232
6.8 练习234
第7章 Spark Streaming236
7.1 Spark Streaming基础236
7.1.1 流数据定义及其特点236
7.1.2 Spark Streaming的工作流程237
7.1.3 Spark Streaming的核心概念238
7.2 编写一个Spark Streaming程序241
7.3 Spark Streaming Web UI的使用244
7.3.1 Spark Streaming Web UI使用前
准备244
7.3.2 Spark Streaming Web UI参数
说明247
7.4 多路流数据合并处理示例250
7.4.1 示例实现说明250
7.4.2 示例分析:多数据流中Batch Job
的执行254
7.5 DStream Transformation操作255
7.5.1 DStream Transformation实现
原理256
7.5.2 DStream常见的Transformation
操作及说明258
7.5.3 Spark Streaming的窗口(Window)
操作及示例259
7.6 DStream Output 操作262
7.7 练习264
第8章 Structured Streaming265
8.1 Structured Streaming基础265
8.1.1 Structured Streaming处理流程265
8.1.2 Structured Streaming基本概念266
8.1.3 Structured Streaming技术特性268
8.2 Structured Streaming接入Text File
数据源268
8.3 Structured Streaming接入Rate
数据源273
8.4 使用Schema解析JSON格式
数据源274
8.5 使用DataFrame/Dataset处理
流数据277
8.6 Structured Streaming Window
操作282
8.7 Structured Streaming Watermarking
操作288
8.8 Structured Streaming JOIN操作290
8.8.1 Streaming数据与Static数据的
JOIN操作示例291
8.8.2 Streaming数据与Streaming数据
的JOIN操作示例295
8.9 练习304
第9章 SparkR305
9.1 SparkR基础305
9.1.1 为什么需要SparkR305
9.1.2 什么是SparkR306
9.1.3 SparkR和R的关系306
9.1.4 SparkR的技术特征306
9.1.5 SparkR程序运行时架构306
9.2 构建SparkR程序开发和运行
环境307
9.3 SparkR代码的执行方式308
9.3.1 在RStudio-server上执行SparkR
代码309
9.3.2 在R Shell上执行SparkR代码311
9.3.3 使用spark-submit执行SparkR
代码312
9.3.4 在sparkR上执行SparkR代码313
9.4 SparkR的基本使用314
9.4.1 SparkR编程的基本流程315
9.4.2 创建SparkDataFrame315
9.4.3 SparkDataFrame的基本操作318
9.4.4 在Spark上分布式执行R函数319
9.4.5 SQL查询323
9.5 SparkR机器学习算子323
9.5.1 SparkR常用的机器学习算子323
9.5.2 SparkR机器学习算子的使用324
9.6 利用SparkR实现单词统计和
图形输出326
9.7 练习329
第10章 GraphX330
10.1 GraphX基础330
10.1.1 图的定义和传统表示方法330
10.1.2 图计算332
10.1.3 有向多重图332
10.1.4 GraphX特性333
10.1.5 GraphX框架334
10.2 GraphX的基本数据结构335
10.2.1 VertexRDD335
10.2.2 EdgeRDD338
10.2.3 Graph340
10.3 GraphX实现最短路径算法——
SGDSP354
10.4 GraphX Pregel的原理及使用361
10.4.1 GraphX Pregel接口说明361
10.4.2 GraphX Pregel的处理流程362
10.4.3 GraphX Pregel的使用363
10.5 GraphX Pregel实现最短路径
算法——SGPSP366
10.6 练习370
参考文献372