本書是一本講解Spark基礎應用及編程的實用教程,基于 Spark 2.3 版本,內(nèi)容包括 Spark 與大數(shù)據(jù)、構建 Spark 運行環(huán)境、開發(fā)一個Spark 程序、深入理解 Spark 程序代碼、RDD 編程、Spark SQL 結(jié)構化數(shù)據(jù)處理、Spark Streaming、Structured Streaming、SparkR和GraphX。本書總結(jié)了Spark 學習的關鍵點;提出了 Spark 快速學習路線圖;提供配套的 Spark前置課程學習資源鏈接,包括虛擬機、Linux 和 Shell 免費高清視頻、《零基礎快速入門Scala》免費電子書等,幫助零基礎讀者迅速夯實Spark基礎。
本書配以大量的示例、源代碼和注釋,可以幫助讀者快速、全面而又深入地掌握Spark編程技能。
本書既可作為高等院校大數(shù)據(jù)、云計算和人工智能相關專業(yè)的教材,也可以作為Spark學習者和大數(shù)據(jù)研發(fā)人員的技術參考書。
目 錄
前言
第1章 Spark與大數(shù)據(jù)1
1.1 大數(shù)據(jù)開發(fā)基礎1
1.1.1 什么是大數(shù)據(jù)1
1.1.2 大數(shù)據(jù)開發(fā)的通用步驟2
1.1.3 大數(shù)據(jù)開發(fā)技術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 流數(shù)據(jù)處理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開發(fā)Spark框架20
1.5.3 為什么用Scala開發(fā)Spark程序20
1.5.4 Scala開發(fā)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運行環(huán)境26
2.1 Spark程序運行時架構26
2.2 構建Spark大數(shù)據(jù)運行環(huán)境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監(jiān)控Spark程序
運行43
2.7 擴展集群節(jié)點48
2.8 練習49
第3章 開發(fā)一個Spark程序51
3.1 在命令行模式下開發(fā)Spark程序51
3.1.1 構建Scala程序編譯環(huán)境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開發(fā)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程序代碼結(jié)構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程序代碼執(zhí)行過程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 創(chuàng)建RDD89
5.2.1 使用parallelize/makeRDD
創(chuàng)建RDD89
5.2.2 使用textFile創(chuàng)建RDD91
5.2.3 其他RDD創(chuàng)建操作92
5.3 RDD Partition93
5.3.1 Partition的基本操作94
5.3.2 Partition的分區(qū)過程96
5.3.3 Partition和Task98
5.3.4 計算Partition的個數(shù)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結(jié)構化數(shù)據(jù)處理142
6.1 Spark SQL的核心概念142
6.1.1 結(jié)構化數(shù)據(jù)和非結(jié)構化數(shù)據(jù)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數(shù)據(jù)處理概述147
6.2.1 Spark SQL數(shù)據(jù)處理環(huán)境147
6.2.2 Spark SQL處理結(jié)構化數(shù)據(jù)149
6.2.3 Spark SQL處理不同數(shù)據(jù)源的
數(shù)據(jù)150
6.3 構建Spark SQL運行環(huán)境150
6.3.1 Spark SQL運行環(huán)境概述150
6.3.2 構建最簡的Spark SQL運行環(huán)境151
6.3.3 構建兼容Hive的Spark SQL運行
環(huán)境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使用上的區(qū)別163
6.4.5 DataFrame行解析方法164
6.4.6 DataFrame和Dataset轉(zhuǎn)換164
6.5 DataFrame/Dataset與數(shù)據(jù)源的
轉(zhuǎn)換165
6.5.1 DataFrame/Dataset與數(shù)據(jù)源的轉(zhuǎn)換
關系和方法概述165
6.5.2 DataFrame/Dataset與Seq的轉(zhuǎn)換167
6.5.3 DataFrame/Dataset與RDD的
轉(zhuǎn)換169
6.5.4 DataFrame/Dataset文件與Sequence
文件的轉(zhuǎn)換170
6.5.5 DataFrame/Dataset與CSV文件的
轉(zhuǎn)換170
6.5.6 DataFrame/Dataset與JSON文件的
轉(zhuǎn)換176
6.5.7 DataFrame/Dataset與ORC文件的
轉(zhuǎn)換178
6.5.8 DataFrame/Dataset與Parquet文件
的轉(zhuǎn)換179
6.5.9 DataFrame/Dataset與Avro文件的
轉(zhuǎn)換182
6.5.10 DataFrame/Dataset與MySQL
數(shù)據(jù)庫的轉(zhuǎn)換183
6.5.11 DataFrame/Dataset與Hive表的
轉(zhuǎn)換188
6.5.12 DataFrame/Dataset與Built-in data
source表的轉(zhuǎn)換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 流數(shù)據(jù)定義及其特點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參數(shù)
說明247
7.4 多路流數(shù)據(jù)合并處理示例250
7.4.1 示例實現(xiàn)說明250
7.4.2 示例分析:多數(shù)據(jù)流中Batch Job
的執(zhí)行254
7.5 DStream Transformation操作255
7.5.1 DStream Transformation實現(xiàn)
原理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
數(shù)據(jù)源268
8.3 Structured Streaming接入Rate
數(shù)據(jù)源273
8.4 使用Schema解析JSON格式
數(shù)據(jù)源274
8.5 使用DataFrame/Dataset處理
流數(shù)據(jù)277
8.6 Structured Streaming Window
操作282
8.7 Structured Streaming Watermarking
操作288
8.8 Structured Streaming JOIN操作290
8.8.1 Streaming數(shù)據(jù)與Static數(shù)據(jù)的
JOIN操作示例291
8.8.2 Streaming數(shù)據(jù)與Streaming數(shù)據(jù)
的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程序開發(fā)和運行
環(huán)境307
9.3 SparkR代碼的執(zhí)行方式308
9.3.1 在RStudio-server上執(zhí)行SparkR
代碼309
9.3.2 在R Shell上執(zhí)行SparkR代碼311
9.3.3 使用spark-submit執(zhí)行SparkR
代碼312
9.3.4 在sparkR上執(zhí)行SparkR代碼313
9.4 SparkR的基本使用314
9.4.1 SparkR編程的基本流程315
9.4.2 創(chuàng)建SparkDataFrame315
9.4.3 SparkDataFrame的基本操作318
9.4.4 在Spark上分布式執(zhí)行R函數(shù)319
9.4.5 SQL查詢323
9.5 SparkR機器學習算子323
9.5.1 SparkR常用的機器學習算子323
9.5.2 SparkR機器學習算子的使用324
9.6 利用SparkR實現(xiàn)單詞統(tǒng)計和
圖形輸出326
9.7 練習329
第10章 GraphX330
10.1 GraphX基礎330
10.1.1 圖的定義和傳統(tǒng)表示方法330
10.1.2 圖計算332
10.1.3 有向多重圖332
10.1.4 GraphX特性333
10.1.5 GraphX框架334
10.2 GraphX的基本數(shù)據(jù)結(jié)構335
10.2.1 VertexRDD335
10.2.2 EdgeRDD338
10.2.3 Graph340
10.3 GraphX實現(xiàn)最短路徑算法——
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實現(xiàn)最短路徑
算法——SGPSP366
10.6 練習370
參考文獻372