Scala和Spark大數據分析  函數式編程、數據流和機器學習

Scala和Spark大數據分析 函數式編程、數據流和機器學習

作者: [德] 雷扎爾·卡裡姆(Md. Rezaul Karim) [美] 斯里達爾·阿拉(Sridhar Alla) 史躍東 譯
出版社: 清華大學
出版在: 2020-06-01
ISBN-13: 9787302551966
ISBN-10: 7302551960





內容描述


本書介紹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




相關書籍

The Python Apprentice

作者 Robert Smallshire Austin Bingham

2020-06-01

Pro Deep Learning with TensorFlow: A Mathematical Approach to Advanced Artificial Intelligence in Python

作者 Santanu Pattanayak

2020-06-01

深度學習快速入門—使用 TensorFlow (Getting started with TensorFlow)

作者 Giancarlo Zaccone

2020-06-01