Scala和Spark大數據分析 函數式編程、數據流和機器學習 Scala and Spark for Big Data Analytics
[德] 雷扎爾·卡裡姆(Md. Rezaul Karim) [美] 斯里達爾·阿拉(Sridhar Alla) 著 史躍東 譯
- 出版商: 清華大學
- 出版日期: 2020-06-01
- 定價: $948
- 售價: 7.9 折 $749
- 語言: 簡體中文
- ISBN: 7302551960
- ISBN-13: 9787302551966
-
相關分類:
JVM 語言、Spark、大數據 Big-data、Data Science、Machine Learning
- 此書翻譯自: Scala and Spark for Big Data Analytics
立即出貨 (庫存 < 4)
買這商品的人也買了...
-
$148基於 Allegro 的 PCB 設計與開發
-
$320$250 -
$534$507 -
$551快學 Scala, 2/e (Scala for the impatient, 2/e)
-
$352Scratch 編程趣味卡 : 讓孩子們愛上編程游戲
-
$505手把手教你設計 CPU-RISC-V 處理器篇
-
$412RISC-V 架構與嵌入式開發快速入門
-
$301FPGA原理和結構
-
$648$616 -
$580$493 -
$653Spark機器學習實戰
-
$580$493 -
$354$336 -
$768$730 -
$600$468
相關主題
商品描述
本書介紹Spark應用開發的面向對象和函數式編程概念,討論RDD和DataFrame基本抽象,講述如何使用SparkSQL、GraphX和Spark來開發可擴展的、容錯的流式應用程序,最後介紹監控、配置、調試、測試和開發等高級主題。通過本書的學習,你將能使用SparkR和PySpark API開發Spark應用程序,使用Zeppelin進行交互式數據分析,使用Alluxio進行內存數據處理,將透徹理解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.4.1 Spark core 128
5.4.2 Spark SQL 128
5.4.3 Spark Streaming 128
5.4.4 Spark GraphX 129
5.4.5 Spark ML 129
5.4.6 PySpark 130
5.4.7 SparkR 130
5.5 本章小結 131
第6章 開始使用Spark——REPL和RDD 132
6.1 深入理解Apache Spark 132
6.2 安裝Apache Spark 136
6.2.1 Spark獨立服務器模式 136
6.2.2 基於YARN的Spark 140
6.2.3 基於Mesos的Spark 142
6.3 RDD簡介 142
6.4 使用Spark shell 147
6.5 action與transformation算子 150
6.5.1 transformation算子 151
6.5.2 action算子 158
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.1.1 pairRDD 170
7.1.2 DoubleRDD 171
7.1.3 SequenceFileRDD 172
7.1.4 CoGroupedRDD 173
7.1.5 ShuffledRDD 174
7.1.6 UnionRDD 175
7.1.7 HadoopRDD 177
7.1.8 NewHadoopRDD 177
7.2 聚合操作 178
7.2.1 groupByKey 180
7.2.2 reduceByKey 181
7.2.3 aggregateByKey 182
7.2.4 combineByKey 182
7.2.5 groupByKey、reduceByKey、combineByKey和aggregateByKey之間的對比 184
7.3 分區與shuffle 187
7.3.1 分區器 188
7.3.2 shuffle 190
7.4 廣播變量 193
7.4.1 創建廣播變量 194
7.4.2 移除廣播變量 195
7.4.3 銷毀廣播變量 195
7.5 累加器 196
7.6 本章小結 199
第8章 介紹一個小結構——Spark SQL 200
8.1 Spark SQL與數據幀 200
8.2 數據幀API與SQL API 203
8.2.1 pivot 208
8.2.2 filter 208
8.2.3 用戶自定義函數(UDF) 209
8.2.4 結構化數據 210
8.2.5 加載和保存數據集 213
8.3 聚合操作 214
8.3.1 聚合函數 215
8.3.2 groupBy 222
8.3.3 rollup 223
8.3.4 cube 223
8.3.5 窗口函數 224
8.4 連接 226
8.4.1 內連接工作機制 228
8.4.2 廣播連接 229
8.4.3 連接類型 229
8.4.4 連接的性能啟示 236
8.5 本章小結 237
第9章 讓我流起來,Scotty——Spark Streaming 238
9.1 關於流的簡要介紹 238
9.1.1 至少處理一次 240
9.1.2 至多處理一次 241
9.1.3 精確處理一次 242
9.2 Spark Streaming 243
9.2.1 StreamingContext 245
9.2.2 輸入流 246
9.2.3 textFileStream樣例 247
9.2.4 twitterStream樣例 248
9.3 離散流 249
9.3.1 轉換 251
9.3.2 窗口操作 253
9.4 有狀態/無狀態轉換 256
9.4.1 無狀態轉換 256
9.4.2 有狀態轉換 257
9.5 檢查點 257
9.5.1 元數據檢查點 258
9.5.2 數據檢查點 259
9.5.3 driver故障恢復 259
9.6 與流處理平臺(Apache Kafka)的互操作 261
9.6.1 基於接收器的方法 261
9.6.2 direct 流 262
9.6.3 結構化流示例 264
9.7 結構化流 265
9.7.1 處理事件時間(event-time)和延遲數據 268
9.7.2 容錯語義 269
9.8 本章小結 269
第10章 萬物互聯——GraphX 270
10.1 關於圖論的簡要介紹 270
10.2 GraphX 275
10.3 VertexRDD和EdgeRDD 277
10.3.1 VertexRDD 277
10.3.2 EdgeRDD 278
10.4 圖操作 280
10.4.1 filter 281
10.4.2 mapValues 281
10.4.3 aggregateMessages 282
10.4.4 triangleCount 282
10.5 Pregel API 284
10.5.1 connectedComponents 284
10.5.2 旅行商問題(TSP) 285
10.5.3 最短路徑 286
10.6 PageRank 290
10.7 本章小結 291
第11章 掌握機器學習Spark MLlib
和ML 292
11.1 機器學習簡介 292
11.1.1 典型的機器學習工作流 293
11.1.2 機器學習任務 294
11.2 Spark機器學習API 298
11.3 特徵提取與轉換 299
11.3.1 CountVectorizer 301
11.3.2 Tokenizer 302
11.3.3 StopWordsRemover 304
11.3.4 StringIndexer 304
11.3.5 OneHotEncoder 305
11.3.6 Spark ML pipeline 306
11.4 創建一個簡單的pipeline 308
11.5 無監督機器學習 309
11.5.1 降維 309
11.5.2 PCA 309
11.6 分類 314
11.6.1 性能度量 314
11.6.2 使用邏輯回歸的多元分類 324
11.6.3 使用隨機森林提升分類精度 327
11.7 本章小結 330
第12章 貝葉斯與樸素貝葉斯 332
12.1 多元分類 332
12.1.1 將多元分類轉換為二元分類 333
12.1.2 層次分類 338
12.1.3 從二元分類進行擴展 338
12.2 貝葉斯推理 338
12.3 樸素貝葉斯 339
12.3.1 貝葉斯理論概述 340
12.3.2 貝葉斯與樸素貝葉斯 341
12.3.3 使用樸素貝葉斯建立一個可擴展的分類器 341
12.4 決策樹 349
12.5 本章小結 354
第13章 使用Spark MLlib對數據進行聚類分析 355
13.1 無監督學習 355
13.2 聚類技術 357
13.3 基於中心的聚類(CC) 358
13.3.1 CC算法面臨的挑戰 358
13.3.2 K-均值算法是如何工作的 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.2.1 標準轉換器 378
14.2.2 評估轉換器 379
14.3 分詞 381
14.4 StopWordsRemover 383
14.5 NGram 385
14.6 TF-IDF 386
14.6.1 HashingTF 387
14.6.2 逆文檔頻率(IDF) 388
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.1.1 Spark Web接口 402
15.1.2 使用Web UI實現Spark應用的可視化 412
15.2 Spark配置 417
15.2.1 Spark屬性 418
15.2.2 環境變量 419
15.2.3 日誌 420
15.3 Spark應用開發中的常見錯誤 420
15.4 優化技術 425
15.4.1 數據序列化 425
15.4.2 內存優化 428
15.5 本章小結 434
第16章 該聊聊集群了——在集群環境中部署Spark 435
16.1 集群中的Spark架構 435
16.1.1 Spark生態簡述 436
16.1.2 集群設計 437
16.1.3 集群管理 440
16.2 在集群中部署Spark應用 444
16.2.1 提交Spark作業 445
16.2.2 Hadoop YARN 450
16.2.3 Apache Mesos 457
16.2.4 在AWS上部署 459
16.3 本章小結 464
第17章 Spark測試與調試 465
17.1 在分佈式環境中進行測試 465
17.2 測試Spark應用 468
17.2.1 測試Scala方法 468
17.2.2 單元測試 472
17.2.3 測試Spark應用 473
17.2.4 在Windows環境配置
Hadoop運行時 481
17.3 調試Spark應用 483
17.3.1 使用Spark recap的log4j
進行日誌記錄 483
17.3.2 調試Spark應用 488
17.4 本章小結 495
第18章 PySpark與SparkR 496
18.1 PySpark簡介 496
18.2 安裝及配置 497
18.2.1 設置SPARK_HOME 497
18.2.2 在Python IDE中設置PySpark 498
18.2.3 開始使用PySpark 501
18.2.4 使用數據幀和RDD 502
18.2.5 在PySpark中編寫UDF 506
18.2.6 使用K-均值聚類算法進行分析 511
18.3 SparkR簡介 517
18.3.1 為何是SparkR 517
18.3.2 安裝與配置 518
18.3.3 開始使用SparkR 519
18.3.4 使用外部數據源API 520
18.3.5 數據操作 521
18.3.6 查詢SparkR數據幀 523
18.3.7 在RStudio中可視化數據 525
18.4 本章小結 527
第19章 高級機器學習最佳實踐 529
19.1 機器學習最佳實踐 529
19.1.1 過擬合與欠擬合 530
19.1.2 Spark MLlib與SparkML調優 531
19.1.3 為應用選擇合適的算法 532
19.1.4 選擇算法時的考量 533
19.1.5 選擇算法時先檢查數據 534
19.2 ML模型的超參調整 536
19.2.1 超參調整 536
19.2.2 網格搜索參數調整 537
19.2.3 交叉檢驗 538
19.2.4 信用風險分析——一個超參調整的例子 539
19.3 一個Spark推薦系統 548
19.4 主題建模——文本聚類的最佳實踐 555
19.4.1 LDA是如何工作的? 555
19.4.2 基於Spark MLlib的主題建模 557
19.5 本章小結 568
附錄A 使用Alluxio加速Spark 569
附錄B 利用Apache Zeppelin進行交互式數據分析 583