作者介紹
Md. Rezaul Karim 是德國Fraunhofer FIT的研究學者,也是德國亞琛工業大學的博士學位研究生預科生。他擁有計算機科學的學士與碩士學位。在加盟Fraunhofer FIT之前,他曾作為研究員任職於愛爾蘭的數據分析深入研究中心。更早之前酷只海,他還寒鍵格擔任過三星電子公司全球研究中心的首席工程師;該研究中心分布於韓國、印度、越南、土耳其以及孟加拉。再早之前,他還在韓國慶熙大學的資料庫實驗室擔任過助理研究員,在韓國的BMTech21公司擔任悼紙阿過研發工程師,在孟加拉國的i2軟體技術公司擔任過軟體工程師。
Karim擁有超過8年的研發領域工作經驗,並在如下算法和數據結構領域具有深厚的技術背景:C/C++、Java、Scala、R、Python、Docker、Mesos、Zeppelin、Hadoop以及MapReduce,並深入學習了如下技術:Spark、Kafka、DC/OS、DeepLearning4j以及H2O-Sparking Water。他的研究興趣包括機器學習、深度學習、語義網路、關聯數據(Linked Data)、大數據以及生厚微物信息學。同時,他還是Packt出版社出版的以下兩本書籍的作者。
內容簡介
主要內容
◆ 理解Scala的面向對象和函式式編程概念
◆ 深入理解Scala的集合API
◆ 學習RDD和數據幀等Spark核心概念
◆ 使用Spark SQL和GraphX分析結構化與非結構化數據
◆ 使用Spark結構化流來開發具備可擴展性和容錯能力的流式套用
◆ 學習分類、回歸、降維和推薦系統等機器學習最佳實踐,以便使用Spark ML和Spark MLlib中的流行算法來建立預測模型
◆ 建立聚類模型,以便聚類大判說夜量數據設閥端提
◆ 理解Spark套用的調優、調試和監控技術
◆ 使用獨立伺服器模式、Mesos和YARN模式在集群上部署Spark套用
圖書目錄
第1章 Scala簡介 1
1.1 Scala的歷史與設計目標 2
1.2 平台與承擔碑墓編輯器 2
1.3 安裝與創建Scala 3
1.3.1 安裝Java 3
1.3.2 Windows 4
1.3.3 macOS 6
1.4 Scala:可擴展的程式語言 9
1.4.1 Scala是面向對象的 9
1.4.2 Scala是函式式的 9
1.4.3 Scala是靜態類型的 9
1.4.4 在JVM上運行Scala 10
1.4.5 Scala可以執行Java代碼 10
1.4.6 Scala可以完成並發與同步處理 10
1.5 面向Java編程人員的Scala 10
1.5.1 一切類型都是對象 10
1.5.2 類型推導 11
1.5.3 Scala REPL 11
1.5.4 嵌套函式 13
1.5.5 導入語句 13
1.5.6 作為方法的操作符 14
1.5.7 方法與參數列表 15
1.5.8 方法內部的方法 15
1.5.9 Scala中的構造器 16
1.5.10 代替靜態方法的對象 16
1.5.11 特質 17
1.6 面向初學者的Scala 19
1.6.1 你的第一行代碼 20
1.6.2 互動式運行Scala! 21
1.6.3 編譯 21
1.7 本章小結 22
第2章 面向對象的Scala 23
2.1 Scala中的變數 24
2.1.1 引用與值不可變性 25
2.1.2 Scala中的數據類型 26
2.2 Scala中的方法、類和對象 28
2.2.1 Scala中的方法 28
2.2.2 Scala中的類 30
2.2.3 Scala中的對象 30
2.3 包與包對象 41
2.4 Java的互操作性 42
2.5 模式匹配 43
2.6 Scala中的隱式 45
2.7 Scala中的泛型 46
2.8 SBT與其他構建系統 49
2.8.1 使用SBT進行構建 49
2.8.2 Maven與Eclipse 50
2.8.3 Gradle與Eclipse 51
2.9 本章小結 55
第3章 函式式編程概念 56
3.1 函式式編程簡介 57
3.2 面向數據科學家的函式式Scala 59
3.3 學習Spark為何要掌握函式式編程和Scala 59
3.3.1 為何是Spark? 59
3.3.2 Scala與Spark編程模型 60
3.3.3 Scala與Spark生態 61
3.4 純函式與高階函式 62
3.4.1 純函式 62
3.4.2 匿名函式 64
3.4.3 高階函式 66
3.4.4 以函式作為返回值 70
3.5 使用高階函式 71
3.6 函式式Scala中的錯誤處理 72
3.6.1 Scala中的故障與異常 73
3.6.2 拋出異常 73
3.6.3 使用try和catch捕獲異常 73
3.6.4 finally 74
3.6.5 創建Either 75
3.6.6 Future 76
3.6.7 執行任務,而非代碼塊 76
3.7 函式式編程與數據可變性 76
3.8 本章小結 77
第4章 集合API 78
4.1 Scala集合API 78
4.2 類型與層次 79
4.2.1 Traversable 79
4.2.2 Iterable 80
4.2.3 Seq、LinearSeq和IndexedSeq 80
4.2.4 可變型與不可變型 80
4.2.5 Array 82
4.2.6 List 85
4.2.7 Set 86
4.2.8 Tuple 88
4.2.9 Map 89
4.2.10 Option 91
4.2.11 exists 94
4.2.12 forall 96
4.2.13 filter 96
4.2.14 map 97
4.2.15 take 97
4.2.16 groupBy 98
4.2.17 init 98
4.2.18 drop 98
4.2.19 takeWhile 98
4.2.20 dropWhile 99
4.2.21 flatMap 99
4.3 性能特徵 100
4.3.1 集合對象的性能特徵 100
4.3.2 集合對象的記憶體使用 102
4.4 Java互操作性 103
4.5 Scala隱式的使用 104
4.6 本章小結 108
第5章 狙擊大數據——Spark加入戰團 109
5.1 數據分析簡介 109
5.2 大數據簡介 114
5.3 使用Apache Hadoop進行分散式計算 116
5.3.1 Hadoop分散式檔案系統(HDFS) 117
5.3.2 MapReduce框架 122
5.4 Apache Spark駕到 125
5.5 本章小結 131
第6章 開始使用Spark——REPL和RDD 132
6.1 深入理解Apache Spark 132
6.2 安裝Apache Spark 136
6.3 RDD簡介 142
6.4 使用Spark shell 147
6.5 action與transformation運算元 150
6.6 快取 162
6.7 載入和保存數據 165
6.7.1 載入數據 165
6.7.2 保存RDD 166
6.8 本章小結 166
第7章 特殊RDD操作 167
7.1 RDD的類型 167
7.2 聚合操作 178
7.3 分區與shuffle 187
7.3.1 分區器 188
7.3.2 shuffle 190
7.4 廣播變數 193
7.5 累加器 196
7.6 本章小結 199
第8章 介紹一個小結構——Spark SQL 200
8.1 Spark SQL與數據幀 200
8.2 數據幀API與SQL API 203
8.3 聚合操作 214
8.4 連線 226
8.5 本章小結 237
第9章 讓我流起來,Scotty——Spark Streaming 238
9.1 關於流的簡要介紹 238
9.2 Spark Streaming 243
9.3 離散流 249
9.4 有狀態/無狀態轉換 256
9.5 檢查點 257
9.6 與流處理平台(Apache Kafka)的互操作 261
9.7 結構化流 265
9.8 本章小結 269
第10章 萬物互聯——GraphX 270
10.1 關於圖論的簡要介紹 270
10.2 GraphX 275
10.3 VertexRDD和EdgeRDD 277
10.4 圖操作 280
10.5 Pregel API 284
10.6 PageRank 290
10.7 本章小結 291
第11章 掌握機器學習Spark MLlib
和ML 292
11.1 機器學習簡介 292
11.2 Spark機器學習API 298
11.3 特徵提取與轉換 299
11.4 創建一個簡單的pipeline 308
11.5 無監督機器學習 309
11.6 分類 314
11.7 本章小結 330
第12章 貝葉斯與樸素貝葉斯 332
12.1 多元分類 332
12.2 貝葉斯推理 338
12.3 樸素貝葉斯 339
12.4 決策樹 349
12.5 本章小結 354
第13章 使用Spark MLlib對數據進行聚類分析 355
13.1 無監督學習 355
13.2 聚類技術 357
13.3 基於中心的聚類(CC) 358
13.4 分層聚類(HC) 366
13.5 基於分布的聚類(DC) 367
13.6 確定聚類的數量 372
13.7 聚類算法之間的比較分析 373
13.8 提交用於聚類分析的Spark作業 374
13.9 本章小結 374
第14章 使用Spark ML進行文本分析 376
14.1 理解文本分析 376
14.2 轉換器與評估器 378
14.3 分詞 381
14.4 StopWordsRemover 383
14.5 NGram 385
14.6 TF-IDF 386
14.7 Word2Vec 390
14.8 CountVectorizer 392
14.9 使用LDA進行主題建模 393
14.10 文本分類實現 395
14.11 本章小結 400
第15章 Spark調優 402
15.1 監控Spark作業 402
15.2 Spark配置 417
15.3 Spark套用開發中的常見錯誤 420
15.4 最佳化技術 425
15.5 本章小結 434
第16章 該聊聊集群了——在集群環境中部署Spark 435
16.1 集群中的Spark架構 435
16.2 在集群中部署Spark套用 444
16.3 本章小結 464
第17章 Spark測試與調試 465
17.1 在分散式環境中進行測試 465
17.2 測試Spark套用 468
17.3 調試Spark套用 483
17.4 本章小結 495
第18章 PySpark與SparkR 496
18.1 PySpark簡介 496
18.2 安裝及配置 497
18.3 SparkR簡介 517
18.4 本章小結 527
第19章 高級機器學習最佳實踐 529
19.1 機器學習最佳實踐 529
19.2 ML模型的超參調整 536
19.3 一個Spark推薦系統 548
19.4 主題建模——文本聚類的最佳實踐 555
19.5 本章小結 568
附錄A 使用Alluxio加速Spark 569
附錄B 利用Apache Zeppelin進行互動式數據分析 583
1.4.5 Scala可以執行Java代碼 10
1.4.6 Scala可以完成並發與同步處理 10
1.5 面向Java編程人員的Scala 10
1.5.1 一切類型都是對象 10
1.5.2 類型推導 11
1.5.3 Scala REPL 11
1.5.4 嵌套函式 13
1.5.5 導入語句 13
1.5.6 作為方法的操作符 14
1.5.7 方法與參數列表 15
1.5.8 方法內部的方法 15
1.5.9 Scala中的構造器 16
1.5.10 代替靜態方法的對象 16
1.5.11 特質 17
1.6 面向初學者的Scala 19
1.6.1 你的第一行代碼 20
1.6.2 互動式運行Scala! 21
1.6.3 編譯 21
1.7 本章小結 22
第2章 面向對象的Scala 23
2.1 Scala中的變數 24
2.1.1 引用與值不可變性 25
2.1.2 Scala中的數據類型 26
2.2 Scala中的方法、類和對象 28
2.2.1 Scala中的方法 28
2.2.2 Scala中的類 30
2.2.3 Scala中的對象 30
2.3 包與包對象 41
2.4 Java的互操作性 42
2.5 模式匹配 43
2.6 Scala中的隱式 45
2.7 Scala中的泛型 46
2.8 SBT與其他構建系統 49
2.8.1 使用SBT進行構建 49
2.8.2 Maven與Eclipse 50
2.8.3 Gradle與Eclipse 51
2.9 本章小結 55
第3章 函式式編程概念 56
3.1 函式式編程簡介 57
3.2 面向數據科學家的函式式Scala 59
3.3 學習Spark為何要掌握函式式編程和Scala 59
3.3.1 為何是Spark? 59
3.3.2 Scala與Spark編程模型 60
3.3.3 Scala與Spark生態 61
3.4 純函式與高階函式 62
3.4.1 純函式 62
3.4.2 匿名函式 64
3.4.3 高階函式 66
3.4.4 以函式作為返回值 70
3.5 使用高階函式 71
3.6 函式式Scala中的錯誤處理 72
3.6.1 Scala中的故障與異常 73
3.6.2 拋出異常 73
3.6.3 使用try和catch捕獲異常 73
3.6.4 finally 74
3.6.5 創建Either 75
3.6.6 Future 76
3.6.7 執行任務,而非代碼塊 76
3.7 函式式編程與數據可變性 76
3.8 本章小結 77
第4章 集合API 78
4.1 Scala集合API 78
4.2 類型與層次 79
4.2.1 Traversable 79
4.2.2 Iterable 80
4.2.3 Seq、LinearSeq和IndexedSeq 80
4.2.4 可變型與不可變型 80
4.2.5 Array 82
4.2.6 List 85
4.2.7 Set 86
4.2.8 Tuple 88
4.2.9 Map 89
4.2.10 Option 91
4.2.11 exists 94
4.2.12 forall 96
4.2.13 filter 96
4.2.14 map 97
4.2.15 take 97
4.2.16 groupBy 98
4.2.17 init 98
4.2.18 drop 98
4.2.19 takeWhile 98
4.2.20 dropWhile 99
4.2.21 flatMap 99
4.3 性能特徵 100
4.3.1 集合對象的性能特徵 100
4.3.2 集合對象的記憶體使用 102
4.4 Java互操作性 103
4.5 Scala隱式的使用 104
4.6 本章小結 108
第5章 狙擊大數據——Spark加入戰團 109
5.1 數據分析簡介 109
5.2 大數據簡介 114
5.3 使用Apache Hadoop進行分散式計算 116
5.3.1 Hadoop分散式檔案系統(HDFS) 117
5.3.2 MapReduce框架 122
5.4 Apache Spark駕到 125
5.5 本章小結 131
第6章 開始使用Spark——REPL和RDD 132
6.1 深入理解Apache Spark 132
6.2 安裝Apache Spark 136
6.3 RDD簡介 142
6.4 使用Spark shell 147
6.5 action與transformation運算元 150
6.6 快取 162
6.7 載入和保存數據 165
6.7.1 載入數據 165
6.7.2 保存RDD 166
6.8 本章小結 166
第7章 特殊RDD操作 167
7.1 RDD的類型 167
7.2 聚合操作 178
7.3 分區與shuffle 187
7.3.1 分區器 188
7.3.2 shuffle 190
7.4 廣播變數 193
7.5 累加器 196
7.6 本章小結 199
第8章 介紹一個小結構——Spark SQL 200
8.1 Spark SQL與數據幀 200
8.2 數據幀API與SQL API 203
8.3 聚合操作 214
8.4 連線 226
8.5 本章小結 237
第9章 讓我流起來,Scotty——Spark Streaming 238
9.1 關於流的簡要介紹 238
9.2 Spark Streaming 243
9.3 離散流 249
9.4 有狀態/無狀態轉換 256
9.5 檢查點 257
9.6 與流處理平台(Apache Kafka)的互操作 261
9.7 結構化流 265
9.8 本章小結 269
第10章 萬物互聯——GraphX 270
10.1 關於圖論的簡要介紹 270
10.2 GraphX 275
10.3 VertexRDD和EdgeRDD 277
10.4 圖操作 280
10.5 Pregel API 284
10.6 PageRank 290
10.7 本章小結 291
第11章 掌握機器學習Spark MLlib
和ML 292
11.1 機器學習簡介 292
11.2 Spark機器學習API 298
11.3 特徵提取與轉換 299
11.4 創建一個簡單的pipeline 308
11.5 無監督機器學習 309
11.6 分類 314
11.7 本章小結 330
第12章 貝葉斯與樸素貝葉斯 332
12.1 多元分類 332
12.2 貝葉斯推理 338
12.3 樸素貝葉斯 339
12.4 決策樹 349
12.5 本章小結 354
第13章 使用Spark MLlib對數據進行聚類分析 355
13.1 無監督學習 355
13.2 聚類技術 357
13.3 基於中心的聚類(CC) 358
13.4 分層聚類(HC) 366
13.5 基於分布的聚類(DC) 367
13.6 確定聚類的數量 372
13.7 聚類算法之間的比較分析 373
13.8 提交用於聚類分析的Spark作業 374
13.9 本章小結 374
第14章 使用Spark ML進行文本分析 376
14.1 理解文本分析 376
14.2 轉換器與評估器 378
14.3 分詞 381
14.4 StopWordsRemover 383
14.5 NGram 385
14.6 TF-IDF 386
14.7 Word2Vec 390
14.8 CountVectorizer 392
14.9 使用LDA進行主題建模 393
14.10 文本分類實現 395
14.11 本章小結 400
第15章 Spark調優 402
15.1 監控Spark作業 402
15.2 Spark配置 417
15.3 Spark套用開發中的常見錯誤 420
15.4 最佳化技術 425
15.5 本章小結 434
第16章 該聊聊集群了——在集群環境中部署Spark 435
16.1 集群中的Spark架構 435
16.2 在集群中部署Spark套用 444
16.3 本章小結 464
第17章 Spark測試與調試 465
17.1 在分散式環境中進行測試 465
17.2 測試Spark套用 468
17.3 調試Spark套用 483
17.4 本章小結 495
第18章 PySpark與SparkR 496
18.1 PySpark簡介 496
18.2 安裝及配置 497
18.3 SparkR簡介 517
18.4 本章小結 527
第19章 高級機器學習最佳實踐 529
19.1 機器學習最佳實踐 529
19.2 ML模型的超參調整 536
19.3 一個Spark推薦系統 548
19.4 主題建模——文本聚類的最佳實踐 555
19.5 本章小結 568
附錄A 使用Alluxio加速Spark 569
附錄B 利用Apache Zeppelin進行互動式數據分析 583