目 錄
第一部分 入門篇
第1章 初識(shí)Spark SQL 3
1.1 Spark SQL的前世今生 3
1.2 Spark SQL能做什么 4
第2章 Spark安裝、編程環(huán)境搭建以及打包提交 6
2.1 Spark的簡易安裝 6
2.2 準(zhǔn)備編寫Spark應(yīng)用程序的IDEA環(huán)境 10
2.3 將編寫好的Spark應(yīng)用程序打包成jar提交到Spark上 18
第二部分 基礎(chǔ)篇
第3章 Spark上的RDD編程 23
3.1 RDD基礎(chǔ) 24
3.1.1 創(chuàng)建RDD 24
3.1.2 RDD轉(zhuǎn)化操作、行動(dòng)操作 24
3.1.3 惰性求值 25
3.1.4 RDD緩存概述 26
3.1.5 RDD基本編程步驟 26
3.2 RDD簡單實(shí)例—wordcount 27
3.3 創(chuàng)建RDD 28
3.3.1 程序內(nèi)部數(shù)據(jù)作為數(shù)據(jù)源 28
3.3.2 外部數(shù)據(jù)源 29
3.4 RDD操作 33
3.4.1 轉(zhuǎn)化操作 34
3.4.2 行動(dòng)操作 37
3.4.3 惰性求值 38
3.5 向Spark傳遞函數(shù) 39
3.5.1 傳入匿名函數(shù) 39
3.5.2 傳入靜態(tài)方法和傳入方法的引用 40
3.5.3 閉包的理解 41
3.5.4 關(guān)于向Spark傳遞函數(shù)與閉包的總結(jié) 42
3.6 常見的轉(zhuǎn)化操作和行動(dòng)操作42
3.6.1 基本RDD轉(zhuǎn)化操作 43
3.6.2 基本RDD行動(dòng)操作 48
3.6.3 鍵值對(duì)RDD 52
3.6.4 不同類型RDD之間的轉(zhuǎn)換 56
3.7 深入理解RDD 57
3.8 RDD 緩存、持久化 59
3.8.1 RDD緩存 59
3.8.2 RDD持久化 61
3.8.3 持久化存儲(chǔ)等級(jí)選取策略 63
3.9 RDD checkpoint容錯(cuò)機(jī)制 64
第4章 Spark SQL編程入門 66
4.1 Spark SQL概述 66
4.1.1 Spark SQL是什么 66
4.1.2 Spark SQL通過什么來實(shí)現(xiàn) 66
4.1.3 Spark SQL 處理數(shù)據(jù)的優(yōu)勢 67
4.1.4 Spark SQL數(shù)據(jù)核心抽象——DataFrame 67
4.2 SparkSQL編程入門示例 69
4.2.1 程序主入口:SparkSession 69
4.2.2 創(chuàng)建 DataFrame 70
4.2.3 DataFrame基本操作 70
4.2.4 執(zhí)行SQL查詢 72
4.2.5 全局臨時(shí)表 73
4.2.6 Dataset 73
4.2.7 將RDDs轉(zhuǎn)化為DataFrame 75
4.2.8 用戶自定義函數(shù) 78
第5章 Spark SQL的DataFrame操作大全 82
5.1 由JSON文件生成所需的DataFrame對(duì)象 82
5.2 DataFrame上的行動(dòng)操作 84
5.3 DataFrame上的轉(zhuǎn)化操作 91
5.3.1 where條件相關(guān) 92
5.3.2 查詢指定列 94
5.3.3 思維開拓:Column的巧妙應(yīng)用 99
5.3.4 limit操作 102
5.3.5 排序操作:order by和sort 103
5.3.6 group by操作 106
5.3.7 distinct、dropDuplicates去重操作 107
5.3.8 聚合操作 109
5.3.9 union合并操作 110
5.3.10 join操作 111
5.3.11 獲取指定字段統(tǒng)計(jì)信息 114
5.3.12 獲取兩個(gè)DataFrame中共有的記錄 116
5.3.13 獲取一個(gè)DataFrame中有另一個(gè)DataFrame中沒有的記錄 116
5.3.14 操作字段名 117
5.3.15 處理空值列 118
第6章 Spark SQL支持的多種數(shù)據(jù)源 121
6.1 概述 121
6.1.1 通用load/save 函數(shù) 121
6.1.2 手動(dòng)指定選項(xiàng) 123
6.1.3 在文件上直接進(jìn)行SQL查詢 123
6.1.4 存儲(chǔ)模式 123
6.1.5 持久化到表 124
6.1.6 bucket、排序、分區(qū)操作 124
6.2 典型結(jié)構(gòu)化數(shù)據(jù)源 125
6.2.1 Parquet 文件 125
6.2.2 JSON 數(shù)據(jù)集 129
6.2.3 Hive表 130
6.2.4 其他數(shù)據(jù)庫中的數(shù)據(jù)表 133
第三部分 實(shí)踐篇
第7章 Spark SQL 工程實(shí)戰(zhàn)之基于WiFi探針的商業(yè)大數(shù)據(jù)分析技術(shù)139
7.1 功能需求 139
7.1.1 數(shù)據(jù)收集 139
7.1.2 數(shù)據(jù)清洗 140
7.1.3 客流數(shù)據(jù)分析 141
7.1.4 數(shù)據(jù)導(dǎo)出 142
7.2 系統(tǒng)架構(gòu) 142
7.3 功能設(shè)計(jì) 143
7.4 數(shù)據(jù)庫結(jié)構(gòu) 144
7.5 本章小結(jié) 144
第8章 第一個(gè)Spark SQL應(yīng)用程序 145
8.1 完全分布式環(huán)境搭建 145
8.1.1 Java 環(huán)境配置 145
8.1.2 Hadoop 安裝配置 146
8.1.3 Spark安裝配置 149
8.2 數(shù)據(jù)清洗 150
8.3 數(shù)據(jù)處理流程 153
8.4 Spark程序遠(yuǎn)程調(diào)試 164
8.4.1 導(dǎo)出jar包 164
8.4.2 IDEA配置 168
8.4.3 服務(wù)端配置 170
8.5 Spark的Web界面 171
8.6 本章小結(jié) 172
第四部分 優(yōu)化篇
第9章 讓Spark程序再快一點(diǎn) 175
9.1 Spark執(zhí)行流程 175
9.2 Spark內(nèi)存簡介 176
9.3 Spark的一些概念 177
9.4 Spark編程四大守則 178
9.5 Spark調(diào)優(yōu)七式 183
9.6 解決數(shù)據(jù)傾斜問題 192
9.7 Spark 執(zhí)行引擎 Tungsten 簡介 195
9.8 Spark SQL解析引擎Catalyst 簡介 197
9.9 本章小結(jié) 200