Spark大數(shù)據(jù)技術(shù)與應(yīng)用
本書(shū)是關(guān)于大數(shù)據(jù)和Spark的實(shí)用手冊(cè)。它將助你學(xué)習(xí)如何用Spark來(lái)完成很多大數(shù)據(jù)分析任務(wù),其中覆蓋了高效利用Spark所需要知道的重要主題:如何使用SparkShell進(jìn)行交互式數(shù)據(jù)分析、如何編寫(xiě)Spark應(yīng)用、如何在Spark中對(duì)大規(guī)模數(shù)據(jù)進(jìn)行交互分析、如何使用SparkStreaming處理高速數(shù)據(jù)流、如何使用Spark進(jìn)行機(jī)器學(xué)習(xí)、如何使用Spark進(jìn)行圖處理如何監(jiān)控Spark應(yīng)用等。
Spark提供高級(jí)API,應(yīng)用開(kāi)發(fā)者之用專注計(jì)算機(jī)本身不用關(guān)注集群本身。
Spark計(jì)算速度快,支持交互式計(jì)算和復(fù)雜計(jì)算。
Spark是一個(gè)通用引擎,可以完成各種運(yùn)算。
許桂秋,計(jì)算機(jī)學(xué)士,工商管理碩士。 2009年-2012年,中國(guó)石油天然氣股份有限公司,負(fù)責(zé)項(xiàng)目管理工作,企業(yè)內(nèi)部高級(jí)講師; 2012年-2015年,曙光信息產(chǎn)業(yè)股份有限公司,負(fù)責(zé)項(xiàng)目管理與企業(yè)內(nèi)部培訓(xùn)工作,企業(yè)內(nèi)部高級(jí)講師; 2016年至今,曙光瑞翼教育合作中心,教學(xué)運(yùn)營(yíng)總監(jiān),負(fù)責(zé)各高校合作項(xiàng)目部的具體運(yùn)營(yíng)管理及指導(dǎo)工作。
第1章 Spark簡(jiǎn)介與運(yùn)行原理 1
1.1 Spark是什么 1
1.1.1 Spark的版本發(fā)展歷程 2
1.1.2 Spark與Hadoop的區(qū)別與聯(lián)系 2
1.1.3 Spark的應(yīng)用場(chǎng)景 3
1.2 Spark的生態(tài)系統(tǒng) 3
1.3 Spark的架構(gòu)與原理 4
1.3.1 Spark架構(gòu)設(shè)計(jì) 4
1.3.2 Spark作業(yè)運(yùn)行流程 5
1.3.3 Spark分布式計(jì)算流程 6
1.4 Spark 2.X新特性 6
1.4.1 精簡(jiǎn)的API 6
1.4.2 Spark作為編譯器 7
1.4.3 智能化程度 7
1.5 小結(jié) 7
習(xí)題 8
第2章 Spark的環(huán)境搭建 9
2.1 環(huán)境搭建前的準(zhǔn)備 9
2.2 Spark相關(guān)配置 13
2.2.1 安裝SSH 13
2.2.2 SSH免密碼登錄 14
2.2.3 修改訪問(wèn)權(quán)限 15
2.2.4 修改profile文件 15
2.2.5 修改Spark配置文件 16
2.3 Spark集群?jiǎn)?dòng)與關(guān)閉 17
2.4 Spark應(yīng)用提交到集群 18
2.5 Spark Web監(jiān)控頁(yè)面 19
2.6 小結(jié) 20
習(xí)題 20
第3章 使用Python開(kāi)發(fā)Spark應(yīng)用 21
3.1 Python編程語(yǔ)言 21
3.1.1 Python語(yǔ)言介紹 21
3.1.2 PySpark是什么 22
3.2 PySpark的啟動(dòng)與日志設(shè)置 22
3.2.1 PySpark的啟動(dòng)方式 22
3.2.2 日志輸出內(nèi)容控制 24
3.3 PySpark開(kāi)發(fā)包的安裝 24
3.3.1 使用pip命令安裝 24
3.3.2 使用離線包安裝 25
3.4 使用PyCharm編寫(xiě)Spark應(yīng)用 25
3.4.1 PyCharm的安裝與基本配置 25
3.4.2 編寫(xiě)Spark應(yīng)用 27
3.5 小結(jié) 29
習(xí)題 30
第4章 Spark RDD 31
4.1 彈性分布式數(shù)據(jù)集 31
4.1.1 RDD的定義 31
4.1.2 RDD的特點(diǎn) 32
4.1.3 RDD的創(chuàng)建 33
4.1.4 RDD的操作 34
4.2 transform算子 34
4.2.1 map轉(zhuǎn)換 34
4.2.2 flatMap轉(zhuǎn)換 35
4.2.3 filter轉(zhuǎn)換 35
4.2.4 union轉(zhuǎn)換 35
4.2.5 intersection轉(zhuǎn)換 36
4.2.6 distinct轉(zhuǎn)換 36
4.2.7 sortBy轉(zhuǎn)換 36
4.2.8 mapPartitions轉(zhuǎn)換 36
4.2.9 mapPartitionsWithIndex轉(zhuǎn)換 37
4.2.10 partitionBy轉(zhuǎn)換 37
4.3 action算子 37
4.3.1 reduce(f)動(dòng)作 37
4.3.2 collect( )動(dòng)作 38
4.3.3 count( )動(dòng)作 38
4.3.4 take(num)動(dòng)作 39
4.3.5 first( )動(dòng)作 39
4.3.6 top(num)動(dòng)作 39
4.3.7 saveAsTextFile( )動(dòng)作 39
4.3.8 foreach(f)動(dòng)作 40
4.3.9 foreachPartition(f)動(dòng)作 40
4.4 RDD Key-Value轉(zhuǎn)換算子 41
4.4.1 mapValues(f)操作 41
4.4.2 flatMapValues(f)操作 41
4.4.3 combineByKey操作 41
4.4.4 reduceByKey操作 42
4.4.5 groupByKey操作 42
4.4.6 sortByKey操作 43
4.4.7 keys( )操作 43
4.4.8 values( )操作 43
4.4.9 join操作 43
4.4.10 leftOuterJoin操作 43
4.4.11 rightOuterJoin操作 44
4.5 RDD Key-Value動(dòng)作運(yùn)算 44
4.5.1 collectAsMap( )操作 44
4.5.2 countByKey( )操作 44
4.6 共享變量 45
4.6.1 累加器 45
4.6.2 廣播變量 45
4.7 依賴關(guān)系 47
4.7.1 血統(tǒng) 47
4.7.2 寬依賴與窄依賴 47
4.7.3 shuffle 48
4.7.4 DAG的生成 49
4.8 Spark RDD的持久化 50
4.8.1 持久化使用方法 50
4.8.2 持久化存儲(chǔ)等級(jí) 51
4.8.3 檢查點(diǎn) 52
4.9 小結(jié) 52
習(xí)題 52
第5章 DataFrame與Spark SQL 54
5.1 DataFrame 54
5.1.1 DataFrame介紹 54
5.1.2 DataFrame創(chuàng)建 55
5.2 Spark SQL 56
5.2.1 Spark SQL介紹 56
5.2.2 Spark SQL的執(zhí)行原理 57
5.2.3 Spark SQL的創(chuàng)建 58
5.3 Spark SQL、DataFrame的常用操作 61
5.3.1 字段計(jì)算 61
5.3.2 條件查詢 62
5.3.3 數(shù)據(jù)排序 63
5.3.4 數(shù)據(jù)去重 63
5.3.5 數(shù)據(jù)分組統(tǒng)計(jì) 64
5.3.6 數(shù)據(jù)連接 65
5.3.7 數(shù)據(jù)繪圖 67
5.4 小結(jié) 68
習(xí)題 69
第6章 Spark Streaming 70
6.1 Spark Streaming介紹 70
6.1.1 什么是Spark Streaming 70
6.1.2 Spark Streaming工作原理 70
6.2 流數(shù)據(jù)加載 71
6.2.1 初始化StreamingContext 71
6.2.2 Discretized Stream離散化流 71
6.2.3 Spark Streaming數(shù)據(jù)源 72
6.3 DStream輸出操作 73
6.4 DStream轉(zhuǎn)換操作 75
6.4.1 map轉(zhuǎn)換 75
6.4.2 flatMap轉(zhuǎn)換 76
6.4.3 filter轉(zhuǎn)換 76
6.4.4 reduceByKey轉(zhuǎn)換 77
6.4.5 count轉(zhuǎn)換 77
6.4.6 updateStateByKey轉(zhuǎn)換 77
6.4.7 其他轉(zhuǎn)換 78
6.5 DataFrame與SQL操作 78
6.6 實(shí)時(shí)WordCount實(shí)驗(yàn) 79
6.7 小結(jié) 81
習(xí)題 81
第7章 Spark機(jī)器學(xué)習(xí)庫(kù) 82
7.1 Spark機(jī)器學(xué)習(xí)庫(kù) 82
7.1.1 機(jī)器學(xué)習(xí)簡(jiǎn)介 82
7.1.2 Spark機(jī)器學(xué)習(xí)庫(kù)的構(gòu)成 82
7.2 準(zhǔn)備數(shù)據(jù) 83
7.2.1 獲取數(shù)據(jù) 83
7.2.2 數(shù)據(jù)預(yù)處理 84
7.2.3 數(shù)據(jù)探索 84
7.3 使用MLlib機(jī)器學(xué)習(xí)庫(kù) 85
7.3.1 搭建環(huán)境 85
7.3.2 加載數(shù)據(jù) 86
7.3.3 探索數(shù)據(jù) 89
7.3.4 預(yù)測(cè)嬰兒生存機(jī)會(huì) 92
7.4 使用ML機(jī)器學(xué)習(xí)庫(kù) 93
7.4.1 轉(zhuǎn)換器、評(píng)估器和管道 94
7.4.2 預(yù)測(cè)嬰兒生存率 95
7.5 小結(jié) 97
習(xí)題 97
第8章 GraphFrames圖計(jì)算 98
8.1 圖 98
8.1.1 度 99
8.1.2 路徑和環(huán) 99
8.1.3 二分圖 100
8.1.4 多重圖和偽圖 100
8.2 GraphFrames介紹 101
8.2.1 應(yīng)用背景 101
8.2.2 GraphFrames庫(kù) 102
8.2.3 使用GraphFrames庫(kù) 102
8.3 GraphFrame編程模型 102
8.3.1 GraphFrame實(shí)例 103
8.3.2 視圖和圖操作 104
8.3.3 模式發(fā)現(xiàn) 105
8.3.4 圖加載和保存 105
8.4 GraphFrames實(shí)現(xiàn)的算法 106
8.4.1 廣度優(yōu)先搜索 106
8.4.2 最短路徑 106
8.4.3 三角形計(jì)數(shù) 107
8.4.4 連通分量 107
8.4.5 標(biāo)簽傳播算法 108
8.4.6 PageRank算法 109
8.5 基于GraphFrames的網(wǎng)頁(yè)排名 110
8.5.1 準(zhǔn)備數(shù)據(jù)集 110
8.5.2 創(chuàng)建GraphFrames 111
8.5.3 使用PageRank進(jìn)行網(wǎng)頁(yè)排名 111
8.6 小結(jié) 111
習(xí)題 111
第9章 出租車數(shù)據(jù)分析 112
9.1 數(shù)據(jù)處理 112
9.2 數(shù)據(jù)分析 113
9.2.1 創(chuàng)建DataFrame 113
9.2.2 KMeans聚類分析 114
9.3 百度地圖可視化 115
9.3.1 申請(qǐng)地圖key 115
9.3.2 聚類結(jié)果可視化 116
9.4 小結(jié) 117
第10章 圖書(shū)推薦系統(tǒng) 118
10.1 Django簡(jiǎn)介 118
10.1.1 Django是什么 118
10.1.2 ORM模型 119
10.1.3 Django模板 119
10.1.4 View視圖 120
10.2 Django項(xiàng)目搭建 121
10.2.1 創(chuàng)建項(xiàng)目 121
10.2.2 創(chuàng)建應(yīng)用 122
10.2.3 創(chuàng)建模型 122
10.3 推薦引擎設(shè)計(jì) 124
10.3.1 導(dǎo)入數(shù)據(jù) 124
10.3.2 訓(xùn)練模型 126
10.3.3 圖書(shū)推薦 127
10.4 系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn) 128
10.4.1 Bootstrap介紹與使用 128
10.4.2 Redis數(shù)據(jù)庫(kù)安裝與使用 129
10.4.3 視圖與路由設(shè)計(jì) 130
10.5 小結(jié) 132