Scala和Spark大數據分析 函數式編程、數據流和機器學習 Scala and Spark for Big Data Analytics

[德] 雷扎爾·卡裡姆(Md. Rezaul Karim) [美] 斯里達爾·阿拉(Sridhar Alla) 著 史躍東 譯

  • Scala和Spark大數據分析  函數式編程、數據流和機器學習-preview-1
  • Scala和Spark大數據分析  函數式編程、數據流和機器學習-preview-2
  • Scala和Spark大數據分析  函數式編程、數據流和機器學習-preview-3
Scala和Spark大數據分析  函數式編程、數據流和機器學習-preview-1

買這商品的人也買了...

商品描述

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