商品簡介
Spark是當前主流的大數據計算框架,本書較為全面地介紹了Spark的基本知識。按照“項目驅動、任務導向”的理念,全書設計了七個項目,分別是搭建Spark環境、編寫Scala程序處理4S店數據、Spark RDD分析交通違章記錄、Spark SQL處理結構化學生信息、Spark編程進階、Spark Streaming處理流數據及Spark ML實現電影推薦。
為了使讀者迅速掌握Spark的基本知識,本書提供了大量編程實例及配套資源,包括源代碼、軟件、數據集、虛擬機、習題答案等;另外,為了進一步降低入門門檻,本書還提供了配置好開發環境的Ubuntu虛擬機,讀者可通過使用Virtual Box等工具導入後,迅速開始Spark相關知識的學習,省卻了大量的環境配置等工作。
本書既可作為大數據、計算機、軟件工程、信息管理等相關專業的教材,也可以作為大數據技術愛好者的自學用書。
目次
項目一 搭建Spark環境 1
項目概述 1
項目演示 1
思維導圖 2
任務1.1 認識大數據 2
1.1.1 大數據時代 2
1.1.2 大數據的普遍特徵――4V 3
1.1.3 大數據的來源 5
1.1.4 大數據的處理過程 5
任務1.2 搭建Hadoop環境 6
1.2.1 認識Hadoop生態體系 7
1.2.2 Hadoop環境的搭建 8
1.2.3 Hadoop平臺的初步體驗 12
任務1.3 認識Spark 13
1.3.1 初識Spark 13
1.3.2 Spark中的運行框架與過程 16
1.3.3 Spark與Hadoop的比較 17
任務1.4 搭建Spark環境 19
1.4.1 Spark部署模式 19
1.4.2 Spark本地模式環境搭建 20
1.4.3 Spark的簡單使用 21
1.4.4 Virtual Box中導入虛擬機 22
項目小結 24
課後練習 24
能力拓展 25
項目二 編寫Scala程序處理4S店數據 26
項目概述 26
項目演示 26
思維導圖 27
任務2.1 Scala的安裝與體驗 27
2.1.1 Scala簡介 27
2.1.2 Scala的特性 28
2.1.3 Scala的下載與安裝 28
2.1.4 輕鬆編寫第一個Scala程序 29
2.1.5 在網頁上編寫Scala程序 31
任務2.2 查找並輸出店鋪的相關信息 32
2.2.1 數據類型 32
2.2.2 變量與常量 32
2.2.3 Scala中的運算符 34
2.2.4 if條件語句 36
2.2.5 Scala中的函數 37
2.2.6 使用函數查詢4S店信息 39
任務2.3 統計廣州4S店的數量 40
2.3.1 for循環 40
2.3.2 while、do...while循環 41
2.3.3 數組 42
2.3.4 使用循環統計廣州4S店的數量 43
任務2.4 分組統計4S店信息 43
2.4.1 元組 43
2.4.2 List 44
2.4.3 Set 46
2.4.4 Map 47
2.4.5 高階函數 48
2.4.6 使用集合分組統計4S店的信息 51
任務2.5 編寫獨立應用程序對店鋪數據進行
分析 52
2.5.1 類與對象 52
2.5.2 繼承 53
2.5.3 特質 54
2.5.4 單例對象與伴生對象 55
2.5.5 模式匹配與樣例類 56
2.5.6 文件的讀/寫 57
2.5.7 讀取數據文件對4S店數據
進行分析 58
項目小結 59
課後練習 60
能力拓展 60
項目三 Spark RDD分析交通違章記錄 61
項目概述 61
項目演示 61
思維導圖 62
任務3.1 根據交通違章數據創建RDD 62
3.1.1 認識RDD 62
3.1.2 從Seq集合創建RDD 63
3.1.3 從外部存儲創建RDD 65
3.1.4 從交通違法數據文件創建RDD 67
任務3.2 找出扣分最高的交通違法條目 67
3.2.1 map操作 68
3.2.2 使用collect查看元素 69
3.2.3 使用take(N)方法查詢RDD中的
N個值 69
3.2.4 使用first操作得到第一個
元素值 69
3.2.5 flatMap操作 70
3.2.6 使用sortBy操作對RDD的
元素進行排序 70
3.2.7 找出扣分最多的三種交通
違法條目 71
任務3.3 查找某車輛的違章記錄 72
3.3.1 filter操作過濾RDD的元素 72
3.3.2 distinct操作進行元素去重 73
3.3.3 union操作進行RDD合併 73
3.3.4 intersection操作求兩個RDD的
共同元素 74
3.3.5 subtract操作求兩個RDD的補 75
3.3.6 cartesian操作求兩個RDD的
笛卡爾積 75
3.3.7 查找車輛AK0803的違章記錄 75
任務3.4 查找違章3次以上車輛 76
3.4.1 鍵值對RDD 76
3.4.2 keys操作得到一個新RDD 77
3.4.3 values操作得到一個新RDD 77
3.4.4 lookup查找value 77
3.4.5 groupByKey 78
3.4.6 reduceByKey 78
3.4.7 mapValues對鍵值對RDD的
value進行處理 79
3.4.8 sortByKey排序 79
3.4.9 查找違章3次以上車輛 80
任務3.5 查找累計扣12分以上車輛信息 80
3.5.1 zip操作將兩個RDD組合成
鍵值對RDD 81
3.5.2 join連接兩個RDD 81
3.5.3 rightOuterJoin 82
3.5.4 leftOuterJoin 82
3.5.5 fullOuterJoin 82
3.5.6 查找累計扣12分以上
車輛信息 83
任務3.6 各類文件的讀/寫操作 85
3.6.1 讀/寫文本文件 85
3.6.2 讀/寫JSON格式的數據 86
3.6.3 讀/寫CSV、TSV格式文件 88
3.6.4 讀/寫SequenceFile文件 90
3.6.5 讀取文件進行詞頻統計並
存儲結果 91
3.6.6 將違章信息保存為TSV
格式文件 92
項目小結 94
課後練習 94
能力拓展 95
項目四 Spark SQL處理結構化學生數據 97
項目概述 97
項目演示 97
思維導圖 98
任務4.1 初識結構化數據處理工具
Spark SQL 98
4.1.1 Spark SQL的產生 98
4.1.2 Spark SQL的特點 99
4.1.3 體驗Spark SQL不同版本的
操作差異 99
任務4.2 認識DataFrame、Dataset
數據類型 100
4.2.1 認識DataFrame 100
4.2.2 認識Dataset 101
4.2.3 RDD、DataFrame、Dataset
三者的區別 102
任務4.3 由學生信息創建DataFrame 102
4.3.1 由學生信息JSON文件
創建DataFrame 102
4.3.2 printSchema打印DataFrame的
數據模式 103
4.3.3 show方法顯示DataFrame中的
數據 103
4.3.4 獲取DataFrame若干行記錄 105
4.3.5 獲取DataFrame所有記錄 106
任務4.4 Spark SQL分析學生信息(1) 106
4.4.1 where方法 106
4.4.2 filter篩選相關數據 108
4.4.3 select方法 108
4.4.4 selectExpr方法 109
4.4.5 獲取指定的Column 109
4.4.6 去掉指定的列 110
任務4.5 Spark SQL分析學生信息(2) 110
4.5.1 limit方法獲取前N行 110
4.5.2 orderBy、sort排序 111
4.5.3 groupBy操作 112
4.5.4 distinct方法去重操作 113
4.5.5 agg操作 114
4.5.6 join操作 114
任務4.6 Spark SQL分析學生信息(3) 115
4.6.1 stat方法獲取指定字段
統計信息 115
4.6.2 intersect方法獲取兩個
DataFrame的共有記錄 116
4.6.3 操作字段名 116
4.6.4 處置空值 117
任務4.7 SQL語法風格處理學生信息 118
4.7.1 Spark SQL中的DSL風格與
SQL風格 118
4.7.2 創建臨時視圖 119
4.7.3 按條件查找學生信息 119
4.7.4 分組統計學生信息 119
4.7.5 用戶自定義函數判斷學生
是否成年 120
任務4.8 其他類型數據創建DataFrame 121
4.8.1 內存數據創建DataFrame 121
4.8.2 JSON文件創建DataFrame 122
4.8.3 CSV數據創建DataFrame 122
4.8.4 Parquet數據創建DataFrame 122
4.8.5 DataFrame數據保存到文件中 123
任務4.9 RDD、DataFrame與Dataset的
相互轉換 123
4.9.1 使用反射機制由RDD生成
DataFrame 123
4.9.2 以編程方式由RDD生成
DataFrame 124
4.9.3 DataFrame轉換為RDD 126
4.9.4 DataFrame與Dataset之間的
轉換 126
任務4.10 通過JDBC連接MySQL
數據庫 127
4.10.1 準備工作 127
4.10.2 讀取MySQL表格創建
DataFrame 128
4.10.3 DataFrame數據寫入MySQL 129
任務4.11 Spark SQL讀/寫Hive數據 130
4.11.1 編譯源代碼、創建支持Hive的
版本 130
4.11.2 讀取Hive數據 130
項目小結 131
課後練習 132
能力拓展 132
項目五 Spark編程進階 134
項目概述 134
項目演示 134
思維導圖 134
任務5.1 搭建IntelliJ IDEA開發環境 135
5.1.1 下載安裝IntelliJ IDEA 135
5.1.2 創建工程 141
5.1.3 修改pom.xml的內容 144
5.1.4 新建Scala文件、編寫程序 146
5.1.5 在IDEA中運行程序 147
5.1.6 工程打包、提交集群運行 148
任務5.2 IDEA下用Spark RDD分析
Sogou日誌 149
5.2.1 數據說明 150
5.2.2 需求分析 150
5.2.3 IDEA下編寫程序 151
5.2.4 運行程序 153
任務5.3 IDEA下用Spark SQL分析
疫苗流向數據 153
5.3.1 數據說明 153
5.3.2 需求分析 154
5.3.3 IDEA下編寫程序 154
5.3.4 運行程序 156
任務5.4 使用RDD緩存機制
提升效率 157
5.4.1 Spark 緩存機制概述 158
5.4.2 Spark RDD緩存體驗 159
任務5.5 認識RDD廣播變量和累加器 162
5.5.1 共享變量 162
5.5.2 廣播變量 162
5.5.3 累加器 164
任務5.6 理解RDD的依賴關係 165
5.6.1 Spark RDD的執行流程 165
5.6.2 RDD間的依賴關係 166
5.6.3 檢查點機制 167
項目小結 169
課後練習 169
能力拓展 169
項目六 Spark Streaming處理流數據 171
項目概述 171
項目演示 171
思維導圖 171
任務6.1 初識流數據處理模塊
Spark Streaming 172
6.1.1 Spark Streaming的產生 172
6.1.2 Spark Streaming的工作原理 173
6.1.3 用Spark-Shell編寫第一個
Spark Streaming程序 174
6.1.4 用IDEA工具寫第一個
Spark Streaming程序 177
6.1.5 編寫Spark Streaming程序的
基本步驟 178
任務6.2 讀取基礎數據源到DStream中 178
6.2.1 讀取文件流 178
6.2.2 讀取套接字流 180
6.2.3 讀取RDD隊列流 180
任務6.3 讀取Kafka數據到DStream中 182
6.3.1 Spark Streaming支持的高級
數據源 182
6.3.2 瞭解Kafka的工作原理 182
6.3.3 Kafka的安裝與測試 183
6.3.4 編寫Spark Streaming程序找出
超速車輛 185
任務6.4 DStream的轉換操作 187
6.4.1 DStream無狀態轉換操作 187
6.4.2 DStream有狀態轉換操作 190
任務6.5 DStream的輸出操作 193
6.5.1 DStream寫入到文本文件 194
6.5.2 DStream寫入到MySQL
數據庫的方法分析 195
6.5.3 車輛定位數據寫入到
MySQL數據庫 196
任務6.6 Spark Streaming實時處理
電商用戶行為數據 198
6.6.1 數據集說明與準備工作 199
6.6.2 任務整體思路 200
6.6.3 Kafka的相關準備工作 200
6.6.4 創建MySQL數據庫、
數據庫表 200
6.6.5 數據寫入Kafka主題中 201
6.6.6 Spark Streaming處理userbehavior
主題中的數據 202
6.6.7 運行結果分析 204
項目小結 204
課後練習 205
能力拓展 205
項目七 Spark ML實現電影推薦 206
項目概述 206
項目演示 206
思維導圖 206
任務7.1 初識Spark機器學習 207
7.1.1 機器學習概述 207
7.1.2 機器學習的應用場景 208
7.1.3 Spark機器學習庫 208
任務7.2 使用Spark ML進行數據
特徵提取與轉換 209
7.2.1 特徵提取 209
7.2.2 特徵轉換 212
任務7.3 Spark分類與聚類 215
7.3.1 樸素貝葉斯分類 215
7.3.2 k-means聚類 218
任務7.4 使用協同過濾算法進行
電影推薦 220
7.4.1 推薦算法原理與分類 220
7.4.2 利用Spark ML實現電影推薦 221
項目小結 223
課後練習 223
能力拓展 224
參考文獻 226