- 深入大型數據集:并行與分布化Python代碼
- (美)J.T.沃勒翰
- 2231字
- 2021-03-04 19:24:13
關于本書
誰應該閱讀本書
本書的目標是向讀者傳授一種可伸縮的編程風格。為了做到這一點,我們將涉及一些你可能不熟悉的編程或技術圖書。其他圖書可能只會介紹某一個函數庫,而本書則會涉及許多函數庫——既有內置的模塊,比如functools和itertools,也有第三方庫,比如toolz、pathos和mrjob。其他的圖書可能只會涉及某一項技術,而本書會涉及很多技術,包括Hadoop、Spark和Amazon Web Services(AWS)。我們選擇覆蓋更廣泛的技術是為了承認這樣一個事實:為了讓代碼具有可伸縮性,你需要能夠適應新的情況。然而,在所有這些技術中,我會強調Python中的“map和reduce”編程風格。
你會發現,在不斷變化的環境中,這種代碼風格能夠始終如一,這也是我最初采用它的原因。你可以使用它來快速調整代碼以適應新的情況。最終,本書的目的是教你如何通過map和reduce編程風格來擴展代碼。在這個過程中,我還打算教你使用一些大數據工具,比如Spark、Hadoop和AWS。
本書是為開發人員或者數據科學家所編寫的,因為他們知道自己正面臨著數據量太大的問題。如果你知道如何解決自己的問題,但卻不能足夠快地處理大規模的數據,那么本書就是為你準備的。如果你對Hadoop和Spark感興趣,本書會很適合你。如果你正在尋找一些關于如何在云端處理大數據的方法,那么本書可能會幫到你。
本書是如何組織的:路線圖
在第1章中,我將介紹map和reduce編程風格,以及其他將在本書中討論的內容。我們將討論并行編程的好處、分布式計算的基礎知識、用于并行和分布式計算的工具,以及云計算。我還為在本書中所涉及的材料提供了一個概念模型。
在第2章中,我將介紹map和reduce編程風格中的map部分,并討論如何并行化一個問題,以便更快地解決它。我將介紹Python的對象持久化過程,即Python如何在并行化期間共享數據,并通過一個示例來演示如何使用并行化來加速Web抓取工作。
在第3章中,我們將使用map函數來執行復雜的數據轉換。在本章中,我將教你如何將小的功能拼接到一起,形成函數管道或者函數鏈,從而產生巨大的效果。我還將演示如何并行化這些函數鏈,以便在大型數據集上更快地解決問題。
在第4章中,我將介紹惰性(laziness)的概念,以及如何利用惰性來加快大數據工作流的處理速度。我將展示如何用惰性函數在本地處理大型數據集問題,如何創建自己的惰性函數,以及如何最佳地結合使用惰性和非惰性的編程方式。我們將使用這些惰性方法來解決一個模擬問題。
在第5章中,我將介紹如何使用reduce函數進行累加轉換。我還會教你如何使用匿名函數(lambda)。在本章中,我們將使用reduce函數來計算大型數據集的匯總統計信息。
在第6章中,我將介紹使用map和reduce的高級并行化技術。你將學習Python中用于并行化的高級函數,以及如何、何時尋求問題的并行解決方案。在本章中,你還將學習如何實現并行的reduce工作流。
在第7章中,我將介紹分布式計算的基礎及Hadoop和Spark等技術。你將使用Hadoop和Spark來編寫一個入門程序,并了解每種框架的優點。我們還將討論Hadoop優于Spark和Spark優于Hadoop的情況。
在第8章中,我將介紹如何使用Hadoop在分布式集群上流式運行map和reduce編程風格的代碼。我還將介紹一個用Python來編寫Hadoop作業的mrjob庫。在此,我將介紹如何在Hadoop的多個作業步驟之間移動復雜的數據類型。我們將通過分析Web流量數據和網球比賽日志的示例來鞏固對這些原則的理解。
在第9章中,我們將深入討論如何使用Spark來讓Python代碼分布式化。我將介紹Spark的RDD數據結構,以及如何使用RDD的方法來實現map和reduce編程風格。我們還將對第8章中的網球比賽日志數據實現經典的PageRank算法。
在第10章中,我們將討論Spark最流行的應用之一:并行機器學習。在本章中,我將介紹機器學習的一些基礎知識。我們將通過實現決策樹和決策森林來實踐這些原則,從而預測一堆蘑菇是否有毒。
在第11章中,我將介紹云計算的基礎知識和云存儲的本質。我們將通過使用Web GUI和基于Python的AWS API包裝庫——boto3,將數據加載到Amazon S3,從而將我們的學習內容付諸實踐。
在第12章中,我們將使用Amazon Elastic MapReduce在云中運行分布式的Hadoop和Spark作業。你將了解如何使用mrjob從控制臺和基于AWS瀏覽器的GUI來搭建一個彈性的Hadoop集群。一旦你掌握了本章的知識內容,就可以處理任何大小的數據集。
關于代碼
在使用Python掌握如何處理大型數據集的過程中,你將會需要一些工具,首先是Python的最新版本。在本書中,Python 3.3+的任何版本都可以使用。在大多數情況下,你可以通過一條pip命令來安裝剩下的軟件:

如果你想搭建一個虛擬的環境,使本書中安裝的包與你當前安裝在路徑上的Python包區分開來,就可以使用如下幾行代碼:

如果你搭建好了一個虛擬環境,記得需要運行source命令來激活它,這樣就可以訪問其內部的庫了。
除Python之外,本書所需的唯一軟件是Hadoop。安裝Hadoop最簡單的方法是到Hadoop的官方網站,按照指示下載Hadoop的說明(參見鏈接1[1])。Hadoop是用Java編寫的,因此你還需要安裝一個Java開發工具包(JDK)來運行它。我建議使用OpenJDK。你可以從OpenJDK的網站上進行下載(參見鏈接2)。
最后,為了學習本書最后兩章的內容,你需要一個AWS賬戶。你可以訪問鏈接3,選擇“登錄到控制臺”(Sign in to the Console)選項,然后創建一個新的AWS賬戶。為了創建自己的賬戶,你需要提供一種支付方式。Amazon將使用該支付方式向你收取使用資源的費用。對于本書而言,你在AWS上需要的資源花費不超過5美元。為了確保消費金額不會超出自己的承受范圍,你可以申請一張預付的Visa卡,并將其設置為自己的支付方式。
讀者服務
微信掃碼回復:40368

■ 獲取各種共享文檔、線上直播、技術分享等免費資源
■ 加入讀者交流群,與更多讀者互動
■ 獲取本書博文視點學院在線課程、電子書20元代金券
[1] 請訪問http://www.broadview.com.cn/40368下載本書提供的附加參考資料。本書中提及參見“鏈接1”“鏈接2”等時,可在下載的“參考資料.pdf”文件中查詢。
- Responsive Web Design with HTML5 and CSS3
- Python程序設計案例教程
- 軟件工程
- MySQL數據庫基礎實例教程(微課版)
- Oracle Exadata專家手冊
- 網站構建技術
- Building Serverless Applications with Python
- Learning Salesforce Einstein
- 學習正則表達式
- .NET 3.5編程
- Visual Basic程序設計習題與上機實踐
- Python機器學習算法與應用
- Building Dynamics CRM 2015 Dashboards with Power BI
- 網絡數據采集技術:Java網絡爬蟲實戰
- WebStorm Essentials