Spark實(shí)戰(zhàn)第二版(涵蓋Spark3.0)

關(guān)注公眾號(hào):登峰大數(shù)據(jù),閱讀Spark實(shí)戰(zhàn)第二版(完整中文版),系統(tǒng)學(xué)習(xí)Spark3.0大數(shù)據(jù)框架!

如果您覺(jué)得作者翻譯的內(nèi)容有幫助,請(qǐng)分享給更多人。您的分享,是作者翻譯的動(dòng)力!

關(guān)于這本書(shū)

當(dāng)我開(kāi)始寫這本書(shū)的時(shí)候,也就是你們現(xiàn)在讀的這本書(shū),Spark實(shí)戰(zhàn)(第二版),我的目標(biāo)是:

幫助Java社區(qū)的朋友使用Apache Spark,并且說(shuō)明使用Spark,不需要學(xué)習(xí)Scala或Python。

解釋Apache Spark、(大)數(shù)據(jù)工程和數(shù)據(jù)科學(xué)背后的關(guān)鍵概念,除了關(guān)系數(shù)據(jù)庫(kù)和一些SQL之外,您不需要了解其他任何東西。

宣傳Spark是一個(gè)為分布式計(jì)算和分析而設(shè)計(jì)的操作系統(tǒng)。

我相信在教授任何計(jì)算機(jī)科學(xué)知識(shí)時(shí),都應(yīng)該有大量的例子。書(shū)中的例子是學(xué)習(xí)過(guò)程中必不可少的一部分。我把它們?cè)O(shè)計(jì)得盡可能接近真實(shí)場(chǎng)景。我的數(shù)據(jù)集來(lái)自有質(zhì)量缺陷的現(xiàn)實(shí)生活;它們不是理想的教科書(shū)數(shù)據(jù)集:“總是可以正常工作”。這就是為什么,當(dāng)結(jié)合這些例子和數(shù)據(jù)集時(shí),您將以一種比消毒的方式更實(shí)用的方式工作和學(xué)習(xí)。我把這些例子稱為實(shí)驗(yàn),希望你們能從中得到啟發(fā),并用它們來(lái)進(jìn)行實(shí)驗(yàn)。

插圖無(wú)處不在?!耙粓D勝千言”這句名言為您省去了額外閱讀的183,000字。

誰(shuí)該讀本書(shū)

將工作頭銜與一本書(shū)聯(lián)系起來(lái)是一項(xiàng)困難的任務(wù),所以如果你的頭銜是數(shù)據(jù)工程師、數(shù)據(jù)科學(xué)家、軟件工程師或數(shù)據(jù)/軟件架構(gòu)師,你肯定會(huì)很高興。如果你是一個(gè)企業(yè)架構(gòu)師,嗯,你可能知道所有這些,就像企業(yè)架構(gòu)師知道關(guān)于一切的一切,不是嗎?更重要的是,如果你想收集更多關(guān)于這些主題的知識(shí),這本書(shū)會(huì)很有幫助:

使用Apache Spark構(gòu)建分析和數(shù)據(jù)管道:接入、轉(zhuǎn)換和導(dǎo)出/發(fā)布數(shù)據(jù)。

不需要學(xué)習(xí)Scala或Hadoop就可以使用Spark:用Java學(xué)習(xí)Spark。

理解關(guān)系數(shù)據(jù)庫(kù)和Spark之間的區(qū)別。

關(guān)于大數(shù)據(jù)的基本概念,包括在Spark環(huán)境中可能遇到的關(guān)鍵Hadoop組件。

Spark在企業(yè)架構(gòu)中的位置。

在大數(shù)據(jù)環(huán)境中使用您現(xiàn)有的Java和RDBMS技能。

理解dataframe API。

通過(guò)在Spark中接入數(shù)據(jù)來(lái)集成關(guān)系數(shù)據(jù)庫(kù)。

通過(guò)流收集數(shù)據(jù)。

了解這個(gè)行業(yè)的發(fā)展,以及為什么Spark是一個(gè)很好的選擇。

理解和使用核心角色:DAAataFrame。

了解什么是彈性分布式數(shù)據(jù)集(RDDs),以及為什么不應(yīng)該(再)使用它們。

理解如何與Spark交互。

了解Spark的各個(gè)組成部分:driver, executors, master and workers, Catalyst, Tungsten。

學(xué)習(xí)關(guān)鍵hadoop派生技術(shù)(如YARN或HDFS)的作用。

理解資源管理器(如YARN、Mesos和內(nèi)置管理器)的角色。

以批處理模式和流方式從各種文件中接入數(shù)據(jù)。

使用SQL和Spark。

操作Spark提供的靜態(tài)函數(shù)。

理解什么是不可變性以及它為什么重要。

使用Java用戶自定義函數(shù)(udf)擴(kuò)展Spark。

使用新的數(shù)據(jù)源擴(kuò)展Spark。

將數(shù)據(jù)從JSON線性化,這樣就可以使用SQL了。

在dataframe上執(zhí)行聚合和聯(lián)合。

使用用戶定義聚合函數(shù)(UDAFs)擴(kuò)展聚合。

理解緩存和檢查點(diǎn)之間的區(qū)別,并提高Spark應(yīng)用程序的性能。

導(dǎo)出數(shù)據(jù)到文件和數(shù)據(jù)庫(kù)。

了解AWS、Azure、IBM Cloud、GCP和本地集群上的部署。

從CSV、XML、JSON、文本、Parquet、ORC和Avro文件中獲取數(shù)據(jù)。

擴(kuò)展數(shù)據(jù)源,并舉例說(shuō)明如何使用EXIF獲取照片元數(shù)據(jù),重點(diǎn)介紹數(shù)據(jù)源API v1。

在構(gòu)建管道時(shí)使用帶Spark的Delta Lake。

你將從這本書(shū)中學(xué)到什么?這本書(shū)的目的是教你如何在應(yīng)用程序中使用Spark,或者為Spark構(gòu)建特定的應(yīng)用程序。我為數(shù)據(jù)工程師和Java軟件工程師設(shè)計(jì)了這本書(shū)。當(dāng)我開(kāi)始學(xué)習(xí)Spark時(shí),所有東西都是用Scala編寫的,幾乎所有文檔都在官方網(wǎng)站上,Stack Overflow每隔幾個(gè)月就會(huì)顯示一次Spark問(wèn)題。當(dāng)然,文檔聲稱Spark有一個(gè)Java API,但是高級(jí)示例很少。當(dāng)時(shí),我的團(tuán)隊(duì)成員對(duì)學(xué)習(xí)Spark,還是學(xué)習(xí)Scala感到困惑,管理層希望得到結(jié)果。我的團(tuán)隊(duì)成員是我寫這本書(shū)的動(dòng)力。

我假設(shè)您具有基本的Java和RDBMS知識(shí)。我在所有示例中使用Java 8,即使Java 11已經(jīng)存在。

閱讀本書(shū)不需要具備Hadoop知識(shí),但是因?yàn)槟鷮⑿枰恍〩adoop組件(非常少),所以我將介紹它們。如果你已經(jīng)知道Hadoop,你肯定會(huì)發(fā)現(xiàn)這本書(shū)令人耳目一新。您不需要任何Scala知識(shí),因?yàn)檫@是一本關(guān)于Spark和Java的書(shū)。當(dāng)我還是個(gè)孩子的時(shí)候(我必須承認(rèn),現(xiàn)在仍然如此),我讀了很多連環(huán)畫,介于漫畫書(shū)和漫畫小說(shuō)之間。因此,我喜歡插圖,在這本書(shū)中我有很多插圖。圖1顯示了一個(gè)帶有幾個(gè)組件、圖標(biāo)和圖例的典型圖表。

圖1 ?在本書(shū)的一個(gè)典型插圖中使用的圖例

本書(shū)是如何組織的

本書(shū)共分四部分和十八個(gè)附錄。

第1部分給出Spark的關(guān)鍵內(nèi)容。你將學(xué)習(xí)理論和一般概念,但不要絕望(現(xiàn)在);我提供了許多示例和圖表。它讀起來(lái)就像一本漫畫書(shū)。

第1章是一個(gè)簡(jiǎn)單例子的全面介紹。您將了解Spark為什么是分布式分析操作系統(tǒng)。

第2章介紹了一個(gè)簡(jiǎn)單的Spark過(guò)程。

第3章介紹了dataframe的強(qiáng)大功能,它結(jié)合了Spark的API和存儲(chǔ)能力。

第4章介紹延遲執(zhí)行,比較Spark和RDBMS,并介紹了有向無(wú)環(huán)圖(DAG)。

第5章和第6章是相關(guān)的:將構(gòu)建一個(gè)小型應(yīng)用程序,構(gòu)建一個(gè)集群,并部署您的應(yīng)用程序。第5章是關(guān)于構(gòu)建一個(gè)小應(yīng)用程序,而第6章是部署應(yīng)用程序。

在第2部分中,您將開(kāi)始深入了解有關(guān)接入數(shù)據(jù)的實(shí)際示例。接入是將數(shù)據(jù)帶入Spark的過(guò)程。它并不復(fù)雜,但有很多可能性和組合。

第7章描述了從文件中接入的數(shù)據(jù):CSV、文本、JSON、XML、Avro、ORC和Parquet。每種文件格式都有自己的示例。

第8章介紹了從數(shù)據(jù)庫(kù)中接入數(shù)據(jù):數(shù)據(jù)將來(lái)自關(guān)系數(shù)據(jù)庫(kù)和其他數(shù)據(jù)存儲(chǔ)。

第9章是關(guān)于從自定義數(shù)據(jù)源接入任何東西。

第10章關(guān)注流數(shù)據(jù)。

第3部分是關(guān)于數(shù)據(jù)轉(zhuǎn)換的:我將其稱為重?cái)?shù)據(jù)提升。您將了解已處理數(shù)據(jù)的數(shù)據(jù)質(zhì)量、轉(zhuǎn)換和發(fā)布。這部分的大部分內(nèi)容討論了使用SQL和它的API、聚合、緩存以及使用UDF擴(kuò)展Spark。

第11章是關(guān)于眾所周知的查詢語(yǔ)言SQL。

第12章教你如何執(zhí)行轉(zhuǎn)換。

第13章將轉(zhuǎn)換擴(kuò)展到整個(gè)文檔的層次。本章還解釋了靜態(tài)函數(shù),這是Spark的許多重要方面之一。

第14章是關(guān)于使用用戶定義函數(shù)擴(kuò)展Spark的。

聚合也是一個(gè)眾所周知的數(shù)據(jù)庫(kù)概念,它可能是分析的關(guān)鍵。第15章介紹了聚合,包括Spark和自定義聚合。

最后,第4部分將更接近生產(chǎn)環(huán)境,并關(guān)注更高級(jí)的主題。您將學(xué)習(xí)分區(qū)和導(dǎo)出數(shù)據(jù)、部署約束(包括云計(jì)算)和優(yōu)化

第16章著重于優(yōu)化技術(shù):緩存和檢查點(diǎn)。

第17章是關(guān)于將數(shù)據(jù)導(dǎo)出到數(shù)據(jù)庫(kù)和文件的。本章還解釋了如何使用Delta Lake,這是一個(gè)接近Spark內(nèi)核的數(shù)據(jù)庫(kù)。

第18章詳細(xì)介紹了部署所需的參考架構(gòu)和安全性。這絕對(duì)是少動(dòng)手,但充滿了關(guān)鍵信息。

這些附錄雖然不是必需的,但也提供了豐富的信息:安裝、故障排除和上下文。其中很多都是在Java上下文中針對(duì)Apache Spark的精心策劃的引用。

關(guān)于代碼

正如我所說(shuō)的,每一章(除了6章和18章)都有結(jié)合代碼和數(shù)據(jù)的實(shí)驗(yàn)。源代碼存在編號(hào)清單中,和與正常文本一致的行中。在這兩種情況下,源代碼都使用固定寬度的字體進(jìn)行格式化,以便與普通文本分開(kāi)。有時(shí)代碼也用粗體顯示,以突出顯示代碼塊中更重要的代碼。

在Apache 2.0許可下,所有代碼都可以在GitHub上免費(fèi)獲得。數(shù)據(jù)可能有不同的許可證。每個(gè)章節(jié)都有自己的存儲(chǔ)庫(kù):第1章將在https://github.com/jgperrin/net.jgp.books.spark.ch01,第15章的代碼在https://github.com/jgperrin/net.jgp.books.spark.ch15,等等,以此類推。有兩個(gè)例外:

第6章使用第5章的代碼。

第18章詳細(xì)討論了部署,沒(méi)有代碼。

由于源代碼控制工具允許分支,主分支包含針對(duì)最新產(chǎn)品版本的代碼,而每個(gè)存儲(chǔ)庫(kù)都包含適用于特定版本的分支。實(shí)驗(yàn)的編號(hào)是三位數(shù),從100開(kāi)始。有兩種實(shí)驗(yàn):書(shū)中描述的實(shí)驗(yàn)和網(wǎng)上提供的額外實(shí)驗(yàn):

書(shū)中所描述的實(shí)驗(yàn)是按章節(jié)編號(hào)的。因此,第12章的實(shí)驗(yàn)200在第12章第2節(jié)中有介紹。同樣,第17章的第100號(hào)實(shí)驗(yàn)也在第17章的第1節(jié)中詳細(xì)說(shuō)明。

書(shū)中沒(méi)有描述的實(shí)驗(yàn)以9開(kāi)頭,如900,910等等。900系列的實(shí)驗(yàn)正在增長(zhǎng):我還在不斷增加。實(shí)驗(yàn)號(hào)不是連續(xù)的,就像基本代碼中的行號(hào)一樣。

在GitHub中,您將發(fā)現(xiàn)使用Python、Scala和Java編寫的代碼(除非它不適用)。然而,為了保持書(shū)中的清晰度,只使用了Java。

在許多情況下,原始的源代碼被重新格式化;我們添加了換行符并修改了縮進(jìn)以適應(yīng)書(shū)中可用的頁(yè)空間。在極少數(shù)情況下,這是不夠的,清單包括續(xù)行標(biāo)記(?)。此外,當(dāng)在文本中描述代碼時(shí),源代碼中的注釋經(jīng)常從清單中刪除。代碼注釋伴隨著許多清單,突出了重要的概念。

第一部分 用實(shí)例來(lái)闡述晦澀的理論

與學(xué)習(xí)任何技術(shù)一樣,在深入使用它之前,需要了解一些“晦澀”的理論。這一部分,我用了六章內(nèi)容,來(lái)闡述這些理論,并通過(guò)實(shí)例來(lái)闡述。

第1章是一個(gè)詳細(xì)介紹的簡(jiǎn)單例子。您將了解為什么Spark不僅僅是一組簡(jiǎn)單的工具,而是一個(gè)真正的分布式分析操作系統(tǒng)。在第一章之后,您將能夠在Spark中運(yùn)行一個(gè)簡(jiǎn)單的數(shù)據(jù)接入操作。

第2章將向您展示Spark是如何工作的。您將通過(guò)詳細(xì)步驟,構(gòu)建一個(gè)心智模型(表示您自己的思維過(guò)程)來(lái)構(gòu)建Spark組件的表示。本章的實(shí)驗(yàn)向您展示了如何導(dǎo)出數(shù)據(jù)庫(kù)中的數(shù)據(jù)。本章包含了大量的插圖,這將使你的學(xué)習(xí)過(guò)程比僅僅從文字和代碼中學(xué)習(xí)更容易!

第3章將帶您進(jìn)入一個(gè)全新的維度:發(fā)現(xiàn)強(qiáng)大的dataframe,它結(jié)合了Spark的API和存儲(chǔ)功能。在本章的實(shí)驗(yàn)室中,你將加載兩個(gè)數(shù)據(jù)集并將它們union在一起。

第4章介紹了Spark的延遲加載,并解釋了Spark使用延遲加載優(yōu)化的原因。您將了解有向無(wú)環(huán)圖(DAG)并比較Spark和RDBMS。本章的實(shí)驗(yàn)教你如何開(kāi)始使用dataframe API操作數(shù)據(jù)。

第5章和第6章是內(nèi)容相關(guān)的:將構(gòu)建一個(gè)小型應(yīng)用程序,構(gòu)建一個(gè)集群,并部署應(yīng)用程序。這兩章非常有實(shí)戰(zhàn)性。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容