Spark 實戰, 2/e (Spark in Action ,2/e)
內容描述
用Java編寫的Spark應用程序; Spark應用架構; 提取文件、數據庫、數據流和Elasticsearch的數據; 使用Spark SOL查詢分佈式數據集
目錄大綱
目 錄
第Ⅰ部分 通過示例講解理論
第1章 Spark介紹 3
1.1 Spark簡介及其作用 4
1.1.1 什麽是Spark 4
1.1.2 Spark神力的四個支柱 5
1.2 如何使用Spark 7
1.2.1 數據處理/工程場景中的Spark 7
1.2.2 數據科學場景中的Spark 8
1.3 使用Spark,能做些什麽 9
1.3.1 使用Spark預測NC餐飲行業的餐館質量 10
1.3.2 Spark允許Lumeris進行快速數據傳輸 10
1.3.3 Spark分析CERN的設備日誌 10
1.3.4 其他用例 11
1.4 為什麽你應該喜歡數據幀 11
1.4.1 從Java角度瞭解數據幀 11
1.4.2 從RDBMS角度理解數據幀 12
1.4.3 數據幀的圖形表示 12
1.5 第一個示例 13
1.5.1 推薦軟件 13
1.5.2 下載代碼 13
1.5.3 運行第一個應用程序 14
1.5.4 第一份代碼 15
1.6 小結 16
第2章 架構和流程 17
2.1 構建思維模型 17
2.2 使用Java代碼構建思維模型 18
2.3 運行應用程序 21
2.3.1 連接到主機 21
2.3.2 加載或提取CSV文件 22
2.3.3 轉換數據 25
2.3.4 將數據幀中完成的工作保存到數據庫中 26
2.4 小結 29
第3章 數據幀的重要作用 31
3.1 數據幀在Spark中的基本作用 32
3.1.1 數據幀的組織 32
3.1.2 不變性並非貶低之詞 33
3.2 通過示例演示數據幀的使用 35
3.2.1 簡單提取CSV後的數據幀 36
3.2.2 數據存儲在分區中 40
3.2.3 挖掘模式 41
3.2.4 提取JSON後的數據幀 43
3.2.5 合並兩個數據幀 48
3.3 數據幀Dataset 53
3.3.1 重用POJO 53
3.3.2 創建字符串數據集 54
3.3.3 來回轉換 55
3.4 數據幀的祖先:RDD 60
3.5 小結 61
第4章 Spark的“惰性”本質 63
4.1 現實中懶惰但高效的示例 64
4.2 懶惰但高效的Spark示例 65
4.2.1 查看數據轉換和數據操作的結果 65
4.2.2 數據轉換的過程,逐步進行 66
4.2.3 數據轉換/操作流程的後台代碼 68
4.2.4 在182毫秒內創建700多萬個數據點的奧秘 71
4.2.5 操作計時背後的奧秘 72
4.3 與RDBMS和傳統應用程序進行比較 76
4.3.1 使用青少年生育率數據集 76
4.3.2 分析傳統應用程序和Spark應用程序之間的區別 77
4.4 對於以數據為中心的應用程序而言,Spark的表現出乎意料 78
4.5 Catalyst是應用程序的催化器 79
4.6 小結 81
第5章 構建一個用於部署的簡單應用程序 83
5.1 無數據提取的示例 83
5.1.1 計算π 84
5.1.2 計算近似值π的代碼 85
5.1.3 Java中的lambda函數是什麽 90
5.1.4 使用lambda函數估算π 92
5.2 與Spark交互 93
5.2.1 本地模式 94
5.2.2 集群模式 95
5.2.3 Scala和Python的交互模式 97
5.3 小結 102
第6章 部署簡單的應用程序 105
6.1 示例之外:組件的作用 106
6.1.1 快速瀏覽組件及其之間的交互 107
6.1.2 Spark架構的故障排除技巧 110
6.1.3 知識拓展 110
6.2 構建集群 111
6.2.1 如何構建集群 111
6.2.2 設置環境 112
6.3 構建應用程序,在集群上運行 115
6.3.1 構建應用程序的超級JAR 115
6.3.2 使用Git和Maven構建應用程序 117
6.4 在集群上運行應用程序 119
6.4.1 提交超級JAR 119
6.4.2 運行應用程序 120
6.4.3 分析Spark的用戶界面 121
6.5 小結 122
第Ⅱ部分 數據提取
第7章 從文件中提取數據 125
7.1 解析器的常見行為 126
7.2 從CSV中提取數據(比較復雜) 126
7.2.1 預期輸出 128
7.2.2 代碼 128
7.3 使用已知模式提取CSV 129
7.3.1 預期輸出 130
7.3.2 代碼 130
7.4 提取JSON文件 132
7.4.1 預期輸出 134
7.4.2 代碼 134
7.5 提取多行JSON文件 135
7.5.1 預期輸出 137
7.5.2 代碼 137
7.6 提取XML文件 138
7.6.1 預期輸出 140
7.6.2 代碼 140
7.7 提取文本文件 142
7.7.1 預期輸出 143
7.7.2 代碼 143
7.8 用於大數據的文件格式 144
7.8.1 傳統文件格式的問題 144
7.8.2 Avro是基於模式的序列化格式 145
7.8.3 ORC是一種列式存儲格式 145
7.8.4 Parquet也是一種列式存儲格式 146
7.8.5 比較Avro、ORC和Parquet 146
7.9 提取Avro、ORC和Parquet文件 146
7.9.1 提取Avro 146
7.9.2 提取ORC 148
7.9.3 提取Parquet 150
7.9.4 用於提取Avro、ORC或Parquet的參考表格 151
7.10 小結 151
第8章 從數據庫中提取數據 153
8.1 從關系數據庫中提取數據 154
8.1.1 數據庫連接備忘錄 154
8.1.2 瞭解示例中使用的數據 155
8.1.3 預期輸出 156
8.1.4 代碼 157
8.1.5 可替代的代碼 159
8.2 dialect的作用 160
8.2.1 什麽是dialect 160
8.2.2 Spark提供的JDBC dialect 161
8.2.3 構建自定義dialect 161
8.3 高級查詢和提取 163
8.3.1 使用WHERE子句進行過濾 163
8.3.2 在數據庫中連接數據 166
8.3.3 執行數據提取和分區 168
8.3.4 高級功能總結 171
8.4 從Elasticsearch中提取數據 171
8.4.1 數據流 171
8.4.2 Spark提取的NYC餐館數據集 172
8.4.3 從 Elasticsearch中提取NYC餐館數據集的代碼 173
8.5 小結 175
第9章 數據提取進階:尋找數據源與構建自定義數據源 177
9.1 什麽是數據源 179
9.2 直接連接數據源的好處 179
9.2.1 臨時文件 180
9.2.2 數據質量腳本 181
9.2.3 按需提供數據 181
9.3 查找Spark軟件包中的數據源 181
9.4 構建自己的數據源 181
9.4.1 示例項目的範圍 182
9.4.2 數據源API和選項 183
9.5 幕後工作:構建數據源本身 185
9.6 使用註冊器文件和廣告器類 186
9.7 理解數據和模式之間的關系 188
9.7.1 數據源構建關系 189
9.7.2 關系內部 191
9.8 使用JavaBean構建模式 194
9.9 使用實用程序構建數據幀的神奇方法 196
9.10 其他類 201
9.11 小結 201
第10章 提取結構化流數據 203
10.1 什麽是流數據 204
10.2 創建首個流數據 205
10.2.1 生成文件流數據 206
10.2.2 消費記錄 208
10.2.3 獲取記錄,而非數據行 213
10.3 從網絡流數據中提取數據 214
10.4 處理多個流數據 216
10.5 區分離散化流數據和結構化流數據 221
10.6 小結 221
第III部分 轉換數據
第11章 使用SQL 225
11.1 使用Spark SQL 225
11.2 本地視圖與全局視圖之間的區別 229
11.3 混合使用數據幀API和Spark SQL 230
11.4 不要刪除數據 233
11.5 進一步瞭解SQL 235
11.6 小結 235
第12章 轉換數據 237
12.1 數據轉換是什麽 238
12.2 在記錄層面進行數據轉換的過程和示例 238
12.2.1 數據發現,瞭解數據的復雜性 240
12.2.2 數據映射,繪制過程 241
12.2.3 編寫轉換代碼 244
12.2.4 審查數據轉換,確保質量流程 249
12.2.5 如何排序 251
12.2.6 結束Spark數據轉換的首次演示 251
12.3 連接數據集 251
12.3.1 仔細查看要連接的數據集 252
12.3.2 構建各縣的高等教育機構列表 253
12.3.3 執行連接操作 258
12.4 執行更多的數據轉換 263
12.5 小結 263
第13章 轉換整個文檔 265
13.1 轉換整個文檔及其結構 265
13.1.1 展平JSON文檔 266
13.1.2 構建嵌套文檔,用於數據傳輸和存儲 270
13.2 靜態函數背後的魔力 274
13.3 執行更多的數據轉換 275
13.4 小結 275
第14章 使用自定義函數擴展數據轉換 277
14.1 擴展Apache Spark 278
14.2 註冊和調用UDF 279
14.2.1 在Spark中註冊UDF 281
14.2.2 將UDF與數據幀API結合起來使用 282
14.2.3 使用SQL處理UDF 283
14.2.4 實現UDF 284
14.2.5 編寫服務代碼 285
14.3 使用UDF,確保數據高質量 287
14.4 考慮UDF的約束 289
14.5 小結 289
第15章 聚合數據 291
15.1 使用Spark聚合數據 291
15.1.1 簡單回顧數據聚合 292
15.1.2 使用Spark執行基本的數據聚合 294
15.2 使用實時數據執行數據聚合 296
15.2.1 準備數據集 297
15.2.2 聚合數據,更好地瞭解學校 301
15.3 使用UDAF構建自定義的聚合操作 306
15.4 小結 311
第IV部分 百尺竿頭,更進一步
第16章 緩存和檢查點:增強Spark的性能 315
16.1 使用緩存和檢查點可提高性能 315
16.1.1 Spark緩存的用途 317
16.1.2 Spark檢查點的妙用 318
16.1.3 使用緩存和檢查點 318
16.2 緩存實戰 326
16.3 有關性能優化的知識拓展 335
16.4 小結 335
第17章 導出數據,構建完整數據管道 337
17.1 導出數據的主要概念 337
17.1.1 使用NASA數據集構建管道 338
17.1.2 將列轉換為日期時間(datetime) 341
17.1.3 將置信度百分比轉換為置信度等級 341
17.1.4 導出數據 342
17.1.5 導出數據:實際發生了什麽 344
17.2 Delta Lake:使用系統核心的數據庫 346
17.2.1 理解需要數據庫的原因 346
17.2.2 在數據管道中使用Delta Lake 347
17.2.3 消費來自Delta Lake的數據 351
17.3 從Spark訪問雲存儲服務 353
17.4 小結 354
第18章 探索部署約束:瞭解生態系統 355
18.1 使用YARN、Mesos和Kubernetes管理資源 356
18.1.1 使用內置的獨立模式管理資源 356
18.1.2 在Hadoop環境中,使用YARN管理資源 357
18.1.3 Mesos是獨立的資源管理器 358
18.1.4 Kubernetes編排容器 360
18.1.5 選擇合適的資源管理器 360
18.2 與Spark共享文件 361
18.2.1 訪問文件中包含的數據 362
18.2.2 通過分佈式文件系統共享文件 362
18.2.3 訪問共享驅動器或文件服務器上的文件 363
18.2.4 使用文件共享服務分發文件 364
18.2.5 訪問Spark文件的其他選項 365
18.2.6 用於與Spark共享文件的混合解決方案 365
18.3 確保Spark應用程序的安全 365
18.3.1 保護基礎架構的網絡組件 366
18.3.2 保護Spark磁盤的使用 367
18.4 小結 367
附錄部分內容通過封底二維碼下載獲取
附錄A 安裝Eclipse 369
附錄B 安裝Maven 375
附錄C 安裝Git 379
附錄D 下載代碼,啟用Eclipse 381
附錄E 企業數據的歷史 387
附錄F 有關關系數據庫的幫助信息 391
附錄G 靜態函數使數據轉換變得容易 397
附錄H 簡略的Maven備忘單 407
附錄I 數據轉換和數據操作的
參考資料 411
附錄J Scala簡介 421
附錄K 在生產環境中安裝Spark,以及一些提示 423
附錄L 關於數據提取的參考資料 435
附錄M 關於連接的參考資料 447
附錄N 安裝Elasticsearch和示例數據 459
附錄O 生成流數據 465
附錄P 有關流數據的參考資料 469
附錄Q 有關導出數據的參考資料 479
附錄R 遇到困難,尋找幫助 487