- Spark快速大數據分析(第2版)
- (美)朱爾斯·S. 達米吉 布魯克·韋尼希 丹尼·李 (印)泰瑟加塔·達斯
- 3645字
- 2021-12-06 11:51:02
前言
歡迎閱讀《Spark 快速大數據分析(第 2 版)》!第 1 版英文版于 2015 年出版,原作者為 Holden Karau、Andy Konwinski、Patrick Wendell 和 Matei Zaharia。新版加入了 Apache Spark 從 2.x 版本到 3.0 版本的演進情況,其中包括內建數據源和外部數據源構成的生態系統、機器學習,以及與 Spark 緊密結合的流處理技術。
多年來,最早從 1.x 版本開始,Spark 就已經成為一站式大數據處理引擎的事實標準。一路走來,Spark 已經擴展到足以支持各種類型的分析作業。我們的目的是為你展示這一演進過程,不僅僅介紹如何使用 Spark,更重要的是如何適應這個屬于大數據與機器學習的新時代。因此,我們精心設計了各個章節,每一章都在前一章的基礎上逐漸深入,確保內容的難易程度適合目標讀者。
目標讀者
跟大數據打交道的人大致分為數據工程師、數據科學家和機器學習工程師。本書的目標讀者正是這類人中尋求使用 Spark 擴展其應用,以處理海量數據的專業人士。
具體來說,數據工程師將學習如何使用 Spark 的結構化數據 API,對批式數據或流式數據進行復雜的探索和分析;使用 Spark SQL 進行交互式查詢;使用 Spark 的內建數據源和外部數據源來讀取、改進和寫出各種文件格式的數據,實現對這些數據的抽取、轉換、加載;使用 Spark 和開源的 Delta Lake 表格式構建出可靠的數據湖。
對于數據科學家和機器學習工程師來說,Spark 的 MLlib 庫為構建分布式機器學習模型提供了很多常用算法。我們將介紹如何使用 MLlib 庫構建流水線,分布式機器學習的最佳實踐,如何使用 Spark 擴展單機模型,以及如何使用開源庫 MLflow 管理和部署這些模型。
本書的重心是將 Spark 作為一種適用于各種類型作業的分析引擎進行學習,但不會介紹 Spark 支持的所有語言。書中的大多數示例是用 Scala、Python 和 SQL 編寫的。必要時,我們也會寫一點點 Java 代碼。對于有興趣用 R 語言學習 Spark 的朋友,我們推薦閱讀由 Javier Luraschi、Kevin Kuo 和 Edgar Ruiz 撰寫的 Mastering Spark with R。
由于 Spark 是一個分布式引擎,因此理解 Spark 應用的一些概念是非常重要的。我們會展示 Spark 應用如何與 Spark 的分布式組件進行交互,以及執行過程如何分解為集群上的并發任務。我們還會介紹各種環境所支持的部署模式。
盡管我們已經選擇了很多主題進行介紹,但也有一些內容未被納入本書范疇。這些排除在本書之外的內容包括較老的底層彈性分布式數據集 API、Spark 中用于圖與圖計算的 API(GraphX)。我們也不會介紹一些較為高階的內容,比如如何擴展 Spark 的 Catalyst 優化器來實現自定義的操作,如何實現自己的表目錄,或者如何自己編寫基于 DataSource V2 接口的數據輸入源與輸出池。雖然這些內容也是 Spark 的一部分,但是它們超出了學習 Spark 的第一本書所應當涉及的內容范疇。
本書的重點將放在 Spark 的結構化數據 API 上,并圍繞這一重點組織內容,從 Spark 的各組件出發,告訴你如何使用 Spark 處理大規模結構化數據,從而完成數據工程任務或數據科學任務。
本書結構
本書各章循序漸進,首先介紹概念,然后通過示例代碼片段演示概念的含義。隨書代碼包 1 提供了完整的代碼示例或代碼筆記本,以供你親手體驗。
1要下載隨書代碼包,請訪問本書在圖靈社區的專屬頁面。——編者注
第 1 章概述大數據演進過程,并從宏觀角度介紹 Apache Spark 及其在大數據領域的應用。
第 2 章手把手地教你如何下載、安裝和設置 Spark。
第 3 章~第 6 章重點介紹 DataFrame 和 Dataset 這兩種結構化數據 API 的使用,包括從內建數據源和外部數據源接入數據、調用內建函數和自定義函數,以及利用 Spark SQL 進行操作。這些章節為后續章節打下了基礎,而且會在適當時穿插介紹 Spark 3.0 的最新變化。
第 7 章提供通過 Spark UI 對 Spark 應用進行調優、優化、調試、檢查的最佳實踐,并詳細介紹那些可以用來提高應用性能的配置項。
第 8 章將帶你領略 Spark 流計算引擎的演進歷程,以及最新的結構化流處理編程模型。這一章將深入剖析典型的流式查詢,探討轉化流式數據的不同方式,其中包括有狀態聚合、流式連接和任意的有狀態計算,還為如何設計出高性能的流式查詢語句提供指導。
第 9 章探討 Spark 生態系統的三種開源表格式存儲解決方案,它們都可以使用 Spark 構建帶有事務保證的可靠數據湖。因為 Delta Lake 在批式作業與流式作業上都與 Spark 緊密結合,所以我們重點介紹這種解決方案,并探索它如何為數據管理建立一種新的范式——湖倉一體。
第 10 章介紹 Spark 的分布式機器學習庫 MLlib,并帶你體驗一個端到端構建機器學習流水線的例子,其中涉及特征工程、超參數調優、評估指標、保存和加載模型等主題。
第 11 章介紹如何使用 MLflow 跟蹤和管理 MLlib 模型,比較和分析不同的模型部署選項,并探索如何利用 Spark 實現非 MLlib 模型的分布式模型推斷、特征工程,以及超參數調優。
第 12 章是全書的最后一章,重點突出 Spark 3.0 的一些重要特性和變動。我們無法在短短一章中囊括所有的優化項和特性,因此只能選取一些應該了解的主要變動來重點介紹。建議你查閱相應的發布說明。
在這些章節中,我們會在必要時穿插講解或提到 Spark 3.0 的特性。所有的代碼示例和代碼筆記本都是基于 Spark 3.0.0-preview2 版本編寫和測試的。
代碼示例說明
本書中的代碼示例既有簡短的代碼片段,也有完整的 Spark 應用,還有端到端的代碼筆記本,涉及的編程語言包括 Scala、Python、SQL,甚至 Java。
雖然書中有一些簡短的代碼片段是獨立的,可以復制粘貼到 Spark shell(pyspark
或 spark-shell
)中直接運行,但也有一些代碼片段是從用 Scala、Python 或 Java 編寫的獨立 Spark 應用或端到端代碼筆記本節選出的一段。如果要運行用 Scala、Python 或 Java 編寫的獨立 Spark 應用,可以閱讀隨書代碼包中相關章節的介紹文檔。
若要運行代碼筆記本,則需要注冊一個免費的 Databricks 社區版賬號。我們在代碼倉庫的介紹文檔中詳細介紹了如何用 Spark 3.0 導入代碼筆記本和創建集群。
使用的軟件和配置
本書和附帶的代碼筆記本中的代碼是基于 Spark 3.0.0-preview2 版本編寫和測試的,這是我們撰寫完最后一章時已發布的版本。
目前,Apache Spark 3.0 正式版已經發布,可供整個社區使用。我們推薦下載和使用正式版本,并在操作系統中使用下列配置。
- Apache Spark 3.0(基于 Apache Hadoop 2.7 編譯好的版本)
- Java 開發套件 1.8.0
如果只想用 Python 進行開發,那么只需要運行 pip install pyspark
。
排版約定
本書使用下列排版約定。
黑體字
表示新術語或重點強調的內容。
等寬字體(constant width
)
表示程序片段,以及正文中出現的變量名、函數名、數據庫、數據類型、環境變量、語句和關鍵字等。
等寬粗體(constant width bold
)
表示應該由用戶輸入的命令或其他文本。
等寬斜體(constant width italic
)
表示應該由用戶輸入的值或根據上下文確定的值替換的文本。
該圖標表示一般注記。
使用代碼示例
如果使用代碼示例時有技術上的疑惑或者遇到問題,請發送郵件到 bookquestions@oreilly.com 尋求幫助。
本書是要幫你完成工作的。一般來說,你可以把本書提供的代碼示例用在你的程序或文檔中。除非你使用了很大一部分代碼,否則無須聯系我們獲得許可。比如,用本書的幾個代碼片段寫一個程序就無須獲得許可,銷售或分發 O'Reilly 圖書的示例光盤則需要獲得許可;引用本書中的代碼示例回答問題無須獲得許可,將書中大量的代碼放到你的產品文檔中則需要獲得許可。
我們很希望但并不強制要求你在引用本書內容時加上引用說明。引用說明一般包括書名、作者、出版社和 ISBN,比如“Learning Spark, Second Edition, by Jules S. Damji, Brooke Wenig, Tathagata Das, and Denny Lee (O'Reilly). Copyright 2020 Databricks, Inc., 978-1-492- 05004-9”。
如果你覺得自己對示例代碼的用法超出了上述許可的范圍,歡迎你通過 permissions@oreilly.com 與我們聯系。
O'Reilly在線學習平臺(O'Reilly Online Learning)

40 多年來,O'Reilly Media 致力于提供技術和商業培訓、知識和卓越見解,來幫助眾多公司取得成功。
我們擁有獨一無二的由專家和革新者組成的龐大網絡,他們通過圖書、文章和我們的在線學習平臺分享他們的知識和經驗。O'Reilly 在線學習平臺讓你能夠按需訪問現場培訓課程、深入的學習路徑、交互式編程環境,以及 O'Reilly 和 200 多家其他出版商提供的大量文本資源和視頻資源。更多信息,請訪問 https://www.oreilly.com。
聯系我們
請把對本書的評價和問題發給出版社。
美國:
O'Reilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
中國:
北京市西城區西直門南大街 2 號成銘大廈 C 座 807 室(100035)
奧萊利技術咨詢(北京)有限公司
請訪問 https://oreil.ly/LearningSpark2,查看相關勘誤。2
2本書中文版勘誤請到圖靈社區本書主頁查看和提交。——編者注
對于本書的評論和技術性問題,請發送電子郵件到:bookquestions@oreilly.com。
要了解更多 O'Reilly 圖書和培訓課程等信息,請訪問以下網站:https://www.oreilly.com。
我們在 Facebook 的地址如下:http://facebook.com/oreilly。
請關注我們的 Twitter 動態:http://twitter.com/oreillymedia。
我們的 YouTube 視頻地址如下:http://www.youtube.com/oreillymedia。
致謝
本書是團隊共同努力的成果,很多人參與其中,如果沒有他們的支持和反饋,我們絕不可能完成本書的創作,尤其是在新冠肺炎疫情帶來的前所未有的困境中。
首先,我們要感謝我們的雇主 Databricks 的支持,公司領導在工作中給我們分配了專門的時間來撰寫本書。我們要特別感謝 Matei Zaharia、Reynold Xin、Ali Ghodsi、Ryan Boyd 和 Rick Schultz,他們的鼓勵使本書第 2 版得以問世。
其次,我們要感謝本書的技術編審:Adam Breindel、Amir Issaei、Jacek Laskowski、Sean Owen,以及 Vishwanath Subramanian。他們根據自己在社區和業界習得的技術專長提出了誠懇且具有建設性的反饋,讓本書成為學習 Spark 的寶貴資源。
除了正式的審校人員,我們還從另外一些人那里獲得了寶貴的反饋意見,他們對具體的主題和章節有著深刻的理解。在此,我們也想感謝他們做出的貢獻。非常感謝 Conor Murphy、Hyukjin Kwon、薛維、Niall Turbitt、范文臣、李瀟和李元健。
最后,我們要感謝 Databricks 的同事(因為他們忍受了我們錯過或無視項目的截止日期)、我們的家人和愛人(感謝他們的耐心和理解,因為我們常常在工作日和周末的清晨或深夜進行寫作),以及整個 Spark 開源社區。如果沒有大家的持續貢獻,Spark 就不會有今天,我們這些作者也就沒那么多內容可寫了。
感謝大家!
更多信息
掃描下方二維碼,即可獲取電子書相關信息及讀者群通道入口。

- 數據存儲架構與技術
- ETL數據整合與處理(Kettle)
- 區塊鏈通俗讀本
- 深入淺出MySQL:數據庫開發、優化與管理維護(第2版)
- 一個64位操作系統的設計與實現
- 數據庫原理與設計(第2版)
- Hadoop大數據開發案例教程與項目實戰(在線實驗+在線自測)
- Oracle 11g+ASP.NET數據庫系統開發案例教程
- Gideros Mobile Game Development
- AndEngine for Android Game Development Cookbook
- 大數據測試技術:數據采集、分析與測試實踐(在線實驗+在線自測)
- 云工作時代:科技進化必將帶來的新工作方式
- NoSQL數據庫原理(第2版·微課版)
- 碼上行動:利用Python與ChatGPT高效搞定Excel數據分析
- AI Crash Course