出版社:人民郵電出版社 ISBN:9787115576019 商品編碼:10042515491556 出版時間:2021-11-01 字數:502 審圖號:9787115576019 代碼:119 作者:朱爾斯·S.達米吉等,王道遠
"
內容介紹 本書的主角是在大數據時代應運而生的數據處理與分析利器——Spark。你將通過豐富的示例學習如何使用Spark的結構化數據API,利用Spark SQL進行交互式查詢,掌握Spark應用的優化之道,用Spark和Delta Lake等開源工具構建可靠的數據湖,並用MLlib庫實現機器學習流水線。隨著Spark從2.x版本升級到3.0版本,本書第2版做了全面的更新,以體現Spark生態繫統在機器學習、流處理技術等方面的發展,另新增一章詳解Spark 3.0引入的新特性。
作者介紹 【作者簡介】 朱爾斯·S. 達米吉(Jules S. Damji)是Databricks的高級開發人員,也是MLflow的貢獻者。 布魯克·韋尼希(Brooke Wenig)是Databricks的機器學習專家。 泰瑟加塔·達斯(Tathagata Das)是Databricks的軟件工程師,也是Apache Spark PMC成員。 丹尼·李(Denny Lee)是Databricks的軟件工程師。 【譯者簡介】 王道遠 目前就職於阿裡雲開源大數據平臺數據湖存儲團隊,花名“健身”,主要負責數據湖架構下的緩存優化工作。有多年的大數據開發經驗,熟悉Spark源碼,從2014年開始參與Spark項目,曾為Spark貢獻大量修復和新特性,也曾作為主要貢獻者參與了OAP和SparkCube等Spark生態開源項目的開發。
目錄
譯者序 xiii ? 對本書的贊譽 xv ? 序 .xvii ? 前言 xix ? 第 1章Apache Spark簡介:一站式分析引擎 1 ? 1.1Spark的起源 1 ? 1.1.1谷歌的大數據和分布式計算 1 ? 1.1.2雅虎的Hadoop 2 ? 1.1.3Spark在AMPLab嶄露頭角 3 ? 1.2什麼是Spar 3 ? 1.2.1快速 4 ? 1.2.2易用 4 ? 1.2.3模塊化 4 ? 1.2.4可擴展 5 ? 1.3一站式數據分析 5 ? 1.3.1由Spark組件組成的一站式軟件棧 6 ? 1.3.2Spark的分布式執行 9 ? 1.4開發者體驗 12 ? 1.4.1哪些人用Spark,用它做什麼 13 ? 1.4.2社區接受度與社區發展 14 ? 第 2 章下載並開始使用Apache Spark 16 ? 2.1第 1 步:下載Spark 16 ? 2.2第 2 步:使用Scala shell 或PySpark shell 18 ? 2.3第3 步:理解Spark 應用的相關概念 22 ? 2.3.1Spark 應用與SparkSession 22 ? 2.3.2Spark 作業 23 ? 2.3.3Spark 執行階段 23 ? 2.3.4Spark 任務 24 ? 2.4轉化操作、行動操作以及惰性求值 24 ? 2.5Spark UI 26 ? 2.6第 一個獨立應用 29 ? 2.6.1統計M&M 巧克力豆 29 ? 2.6.2用Scala 構建獨立應用 34 ? 2.7小結 36 ? 第3 章Apache Spark 的結構化數據API 37 ? 3.1RDD 的背後是什麼 37 ? 3.2Spark 支持結構化數據 38 ? 3.3DataFrame API 41 ? 3.3.1Spark 的基本數據類型 41 ? 3.3.2Spark 中結構化的復雜數據類型 42 ? 3.3.3表結構與DataFrame 43 ? 3.3.4列與表達式 47 ? 3.3.5行 49 ? 3.3.6常見的DataFrame 操作 50 ? 3.3.7完整的DataFrame 示例 59 ? 3.4Dataset API 60 ? 3.4.1有類型對像、無類型對像,以及普通行 61 ? 3.4.2創建Dataset 62 ? 3.4.3Dataset 操作 63 ? 3.4.4完整的Dataset 示例 65 ? 3.5對比DataFrame 和Dataset 65 ? 3.6Spark SQL 及其底層引擎 66 ? 3.7小結 71 ? 第4 章Spark SQL 與DataFrame:內建數據源概覽 73 ? 4.1在Spark 應用中使用Spark SQL 74 ? 4.2SQL 表和視圖 79 ? 4.2.1有管理表和無管理表 79 ? 4.2.2創建SQL 數據庫和SQL 表 79 ? 4.2.3創建視圖 80 ? 4.2.4數據 82 ? 4.2.5緩存SQL 表 82 ? 4.2.6將表讀取為DataFrame 82 ? 4.3DataFrame 和SQL 表的數據源 83 ? 4.3.1DataFrameReader 83 ? 4.3.2DataFrameWriter 85 ? 4.3.3Parquet 86 ? 4.3.4JSON 88 ? 4.3.5CSV 90 ? 4.3.6Avro 92 ? 4.3.7ORC 94 ? 4.3.8圖像 96 ? 4.3.9二進制文件 97 ? 4.4小結 98 ? 第5 章Spark SQL 與DataFrame:讀寫外部數據源 100 ? 5.1Spark SQL 與Apache Hive 100 ? 5.2用Spark SQL shell、Beeline 和Tableau 查詢 106 ? 5.2.1使用Spark SQL shell 106 ? 5.2.2使用Beeline 107 ? 5.2.3使用Tableau 108 ? 5.3外部數據源 114 ? 5.3.1JDBC 和SQL 數據庫 114 ? 5.3.2PostgreSQL 115 ? 5.3.3MySQL 117 ? 5.3.4Azure Cosmos DB 118 ? 5.3.5MS SQL Server 120 ? 5.3.6其他外部數據源 121 ? 5.4DataFrame 和Spark SQL 的高階函數 121 ? 5.4.1方式1:打散再重組 121 ? 5.4.2方式2:用戶自定義函數 122 ? 5.4.3針對復雜數據類型的內建函數 122 ? 5.4.4高階函數 124 ? 5.5常用的DataFrame 操作和Spark SQL 操作 127 ? 5.5.1聯合 130 ? 5.5.2連接 130 ? 5.5.3窗口 131 ? 5.5.4修改 134 ? 5.6小結 137 ? 第6 章Spark SQL 與Dataset 138 ? 6.1Java 與Scala 共用一套API 138 ? 6.2操作Dataset 140 ? 6.2.1創建示例數據 141 ? 6.2.2轉化示例數據 142 ? 6.3Dataset 與DataFrame 的內存管理 147 ? 6.4Dataset 編碼器 147 ? 6.4.1Spark 內部格式與Java 對像格式 148 ? 6.4.2序列化與反序列化 148 ? 6.5使用Dataset 的開銷 149 ? 6.6小結 151 ? 第7 章Spark 應用的優化與調優 152 ? 7.1為效率而優化與調優 152 ? 7.1.1查看與設置Spark 配置 152 ? 7.1.2為大型作業擴展Spark 155 ? 7.2數據的緩存與持久化 160 ? 7.2.1DataFrame.cache() 161 ? 7.2.2DataFrame.persist() 162 ? 7.2.3什麼時候應該緩存和持久化 164 ? 7.2.4什麼時候不應該緩存和持久化 164 ? 7.3Spark 的各種連接算法 164 ? 7.3.1廣播哈希連接 165 ? 7.3.2混洗排序合並連接 166 ? 7.4查看Spark UI 173 ? 7.5小結 180 ? 第8 章結構化流處理 181 ? 8.1Spark 流處理引擎的演進過程 181 ? 8.1.1以微型批模擬的流處理 182 ? 8.1.2從DStream 獲取的經驗教訓 183 ? 8.1.3Structured Streaming 的設計哲學 183 ? 8.2Structured Streaming 的編程模型 184 ? 8.3Structured Streaming 查詢 186 ? 8.3.1五步定義流式查詢 186 ? 8.3.2探究活躍的流式查詢 191 ? 8.3.3失敗恢復與“精確一次”語義 192 ? 8.3.4監控活躍的查詢 194 ? 8.4流式數據源與數據池 196 ? 8.4.1文件 197 ? 8.4.2Kafka 199 ? 8.4.3自定義流式數據源與數據池 200 ? 8.5數據轉化 204 ? 8.5.1增量執行與流處理狀態 204 ? 8.5.2無狀態轉化操作 204 ? 8.5.3有狀態轉化操作 205 ? 8.6有狀態的流式聚合 207 ? 8.6.1不根據時間維度進行聚合 207 ? 8.6.2使用事件時間窗口進行聚合 208 ? 8.7流式連接 214 ? 8.7.1流與靜態表連接 214 ? 8.7.2流與流連接 215 ? 8.8任意的有狀態計算 220 ? 8.8.1用mapGroupsWithState() 為任意有狀態操作建模 220 ? 8.8.2用超時管理不活躍的分組 223 ? 8.8.3用flatMapGroupsWithState() 進行通用操作 226 ? 8.9性能調優 227 ? 8.10小結 229 ? 第9 章用Apache Spark 構建可靠的數據湖 230 ? 9.1*佳存儲解決方案的重要特點 230 ? 9.2數據庫 231 ? 9.2.1數據庫簡介 231 ? 9.2.2用Spark 讀寫數據庫 232 ? 9.2.3數據庫的不足之處 232 ? 9.3數據湖 233 ? 9.3.1數據湖簡介 233 ? 9.3.2用Spark 讀寫數據湖 233 ? 9.3.3數據湖的不足之處 234 ? 9.4湖倉一體:下一代存儲解決方案 235 ? 9.4.1Apache Hudi 236 ? 9.4.2Apache Iceberg 236 ? 9.4.3Delta Lake 236 ? 9.5用Spark 與Delta Lake 構建湖倉一體的繫統 237 ? 9.5.1為使用Delta Lake 配置Spark 237 ? 9.5.2把數據加載到Delta Lake 表中 238 ? 9.5.3把數據流加載到Delta Lake 表中 240 ? 9.5.4寫數據時強化表結構約束以防止數據損壞 241 ? 9.5.5修改表結構以適應數據變化 242 ? 9.5.6轉化已有數據 242 ? 9.5.7根據操作歷史審計數據變更 245 ? 9.5.8用時間旅行功能查詢表以前的快照數據 245 ? 9.6小結 246 ? 第 10 章用MLlib 實現機器學習 247 ? 10.1什麼是機器學習 247 ? 10.1.1監督學習 248 ? 10.1.2無監督學習 249 ? 10.1.3為什麼將Spark 用於機器學習 250 ? 10.2設計機器學習流水線 251 ? 10.2.1接入並探索數據 251 ? 10.2.2創建訓練集與測試集 252 ? 10.2.3為轉化器準備特征 254 ? 10.2.4理解線性回歸 255 ? 10.2.5用預估器構建模型 256 ? 10.2.6創建流水線 257 ? 10.2.7評估模型 262 ? 10.2.8保存和加載模型 266 ? 10.3超參數調優 266 ? 10.3.1基於樹的模型 267 ? 10.3.2k 折交叉驗證 274 ? 10.3.3優化流水線 277 ? 10.4小結 279 ? 第 11 章用Apache Spark管理、部署與伸縮機器學習流水線 280 ? 11.1模型管理 280 ? 11.2用MLlib 部署模型所用的選項 286 ? 11.2.1批處理 287 ? 11.2.2流處理 289 ? 11.2.3導出模型用於實時預測的模式 290 ? 11.3利用Spark 使用非MLlib 模型 291 ? 11.3.1Pandas UDF 291 ? 11.3.2將Spark 用於分布式超參數調優 293 ? 11.4小結 295 ? 第 12 章尾聲:Apache Spark 3.0 296 ? 12.1Spark 內核與Spark SQL 296 ? 12.1.1動態分區裁剪 296 ? 12.1.2自適應查詢執行 298 ? 12.1.3SQL 連接提示 301 ? 12.1.4Catalog 插件API 與DataSourceV2 302 ? 12.1.5可感知加速器的調度器 303 ? 12.2Structured Streaming 304 ? 12.3PySpark、Pandas UDF 和Pandas 函數API 306 ? 12.3.1重新設計的帶有Python 類型提示的Pandas UDF 306 ? 12.3.2Pandas UDF 中的迭代器支持 307 ? 12.3.3新的Pandas 函數API 307 ? 12.4有改動的功能 308 ? 12.4.1支持的與不推薦使用的編程語言 309 ? 12.4.2DataFrame API 和Dataset API 的改動 309 ? 12.4.3DataFrame 與SQL 的explain 命令 309 ? 12.5小結 311 ? 作者簡介 313 ? 封面簡介 313
" |