Apache Spark的入門
如果你在Data World工作,那么你很有可能知道Apache Spark是什么。如果你不知道,那么也還好!我會告訴你它是什么。

由其創(chuàng)建者定義的Spark,是用于大規(guī)模數(shù)據(jù)處理的快速且通用的引擎。
快速部分意味著它比之前使用大數(shù)據(jù)(如經(jīng)典MapReduce)的方法更快??斓拿卦E在于Spark運(yùn)行在內(nèi)存(RAM)上,這使得處理速度比在磁盤上快得多。
通用部分意味著它可以用于多種用途,如運(yùn)行分布式SQL,創(chuàng)建數(shù)據(jù)流水線,將數(shù)據(jù)攝入數(shù)據(jù)庫,運(yùn)行機(jī)器學(xué)習(xí)算法,處理圖形,數(shù)據(jù)流等等。
RDD

Apache Spark的主要抽象和開始是彈性分布式數(shù)據(jù)集(Resilient Distributed Dataset,RDD)。
RDD是可以并行操作的容錯(fault-tolerant)元素集合。您可以創(chuàng)建它們,以跟驅(qū)動程序中的現(xiàn)有數(shù)據(jù)集并行,或者在外部存儲系統(tǒng)(如共享文件系統(tǒng),HDFS,HBase或提供Hadoop InputFormat的任何數(shù)據(jù)源)中引用數(shù)據(jù)集。

了解Spark的非常重要的一點(diǎn)是,所有的轉(zhuǎn)換(transformations) (我們將盡快定義它)都是懶惰的,他們不會馬上計(jì)算結(jié)果。相反,他們只記住應(yīng)用于某些基礎(chǔ)數(shù)據(jù)集(例如文件)的轉(zhuǎn)換(transformations)。轉(zhuǎn)換僅在動作(action)需要將結(jié)果返回給驅(qū)動程序時計(jì)算。
默認(rèn)情況下,每次對其執(zhí)行操作時,每個轉(zhuǎn)換后的RDD都可能會重新計(jì)算。但是,您也可以使用持久化(或緩存)方法將RDD 保留(persist)在內(nèi)存中,在這種情況下,Spark將保留群集中的元素,以便在下次查詢時快速訪問。還支持在磁盤上保存RDD,或在多個節(jié)點(diǎn)上復(fù)制RDD。
如果您想更多地了解Spark中RDD的轉(zhuǎn)換和操作,請查看官方文檔:
RDD編程指南 - Spark 2.3.0文檔
Spark 2.3.0編程指南,Java,Scala和Python
數(shù)據(jù)幀(Dataframe)

自從Spark 2.0.0開始,DataFrame是一個數(shù)據(jù)集(Dataset),被組織到命名列(named columns)中。它在概念上等同于關(guān)系數(shù)據(jù)庫中的表或R / Python中的數(shù)據(jù)框(data frame),但在其內(nèi)部具有更豐富的優(yōu)化。
我們不會在這里討論數(shù)據(jù)集(Datasets),但是它們被定義為可以從JVM對象構(gòu)建的數(shù)據(jù)的分布式集合,然后使用功能轉(zhuǎn)換(functional transformations)進(jìn)行操作。它們僅在Scala和Java中可用(因?yàn)樗鼈兪怯蓄愋停╰yped)的)。
DataFrame可以從各種來源構(gòu)建而成,例如:結(jié)構(gòu)化數(shù)據(jù)文件,Hive中的表,外部數(shù)據(jù)庫或現(xiàn)有的RDD。

簡而言之,Dataframes API是Spark創(chuàng)建者在框架中輕松處理數(shù)據(jù)的方式。它們與Pandas Dataframes或R Dataframes非常相似,但有幾個優(yōu)點(diǎn)。首先當(dāng)然是它們可以分布在一個集群中,因此它們可以處理大量的數(shù)據(jù),第二個是它被優(yōu)化了。
這是社區(qū)采取的非常重要的一步。到2014年,Spark與Scala或Java一起使用要快得多,并且由于性能的原因,整個Spark世界變成了Scala(是一種令人敬畏的語言)。但對于DF API,這已不再是問題,現(xiàn)在您可以在R,Python,Scala或Java中使用它,獲得相同的性能。

催化劑(Catalyst)負(fù)責(zé)這種優(yōu)化。你可以把它看作是一個向?qū)?,他會接受你的查詢(哦,是的,你可以在Spark中運(yùn)行類似SQL的查詢,在DF中運(yùn)行它們,并且它們也將被并行化)和你的動作(actions),并創(chuàng)建一個優(yōu)化的計(jì)劃用于分發(fā)計(jì)算(distributing the computation)。

這個過程并不那么簡單,但作為程序員的你甚至都不會注意到它。現(xiàn)在,它一直在幫助你。
深度學(xué)習(xí)和Apache Spark

如果您想深入了解深度學(xué)習(xí),請繼續(xù)閱讀以下文章:
深度學(xué)習(xí)的“怪異”介紹
有關(guān)Deep Learning的精彩介紹,課程和博客文章。但這是一種不同的介紹。
我的深度學(xué)習(xí)之旅
在這篇文章中,我將分享我如何研究深度學(xué)習(xí)并用它來解決數(shù)據(jù)科學(xué)問題。這是...
你為什么想要在Apache Spark上進(jìn)行深度學(xué)習(xí)?
這是我在開始研究這個問題之前自問的問題。答案分為兩部分:
- Apache Spark是一個以簡單和聲明的方式在集群中分發(fā)計(jì)算的驚人框架。正在成為各行各業(yè)的標(biāo)準(zhǔn),因此將深度學(xué)習(xí)的驚人進(jìn)步加入其中將是一件好事。
- 有些深度學(xué)習(xí)的部分計(jì)算量很大,很重!分發(fā)這些進(jìn)程可能是解決其他問題的解決方案,Apache Spark是我可以想到分發(fā)它們的最簡單方法。
有幾種方法可以用Apache Spark進(jìn)行深度學(xué)習(xí),我之前曾經(jīng)討論過,我在這里再次列出它們(并非詳盡無遺):
1。 Elephas :Keras&PySpark的分布式DL
maxpumperla/elephas
elephas - 使用Keras&Spark做分布式深度學(xué)習(xí)
2。雅虎公司 :TensorFlowOnSpark
yahoo/TensorFlowOnSpark
將TensorFlow程序引入Apache Spark集群
3。CERN 分布式Keras(Keras + Spark)
cerndb/dist-keras
dist-keras - 分布式深度學(xué)習(xí),關(guān)注分布式訓(xùn)練,使用Keras和Apache Spark。
4。Qubole (Keras教程 + Spark)
5。英特爾公司 :BigDL(Apache Spark的分布式深度學(xué)習(xí)庫)
intel-analytics/BigDL
BigDL:面向Apache Spark的分布式深度學(xué)習(xí)庫
深度學(xué)習(xí)流水線

但是我將關(guān)注這些文章的是Deep Learning Pipelines。
databricks/spark-deep-learning
spark-deep-learning - Apache Sparkgithub.com的深度學(xué)習(xí)流水線
深度學(xué)習(xí)流水線是由Databricks創(chuàng)建的開放源代碼庫,它提供了高級API以便使用Apache Spark在Python中進(jìn)行可伸縮深度學(xué)習(xí)。
這是一項(xiàng)非常棒的工作,不久應(yīng)該就會合并到官方API,所以值得一看。
與我之前列出的相比,這個庫的一些優(yōu)點(diǎn)是:
- 本著Spark和Spark MLlib的精神,它提供了易于使用的API,可以只用幾行代碼就可以進(jìn)行深入學(xué)習(xí)。
- 它側(cè)重于易用性和集成性,而不犧牲性能。
- 它由Apache Spark(也是主要貢獻(xiàn)者)的創(chuàng)建者構(gòu)建,因此它更有可能被合并為官方API。
- 它是用Python編寫的,因此它將與所有著名的庫集成在一起,現(xiàn)在它使用TensorFlow和Keras這兩個主要的庫來執(zhí)行DL。
在下一篇文章中,我將全面關(guān)注DL流水線庫以及如何從頭開始使用它。您將看到的一件事情就是在簡單的Pipeline上進(jìn)行Transfer Learning,如何使用預(yù)先訓(xùn)練好的模型來處理“少量”數(shù)據(jù),并能夠預(yù)測事情,以及如何將你創(chuàng)建的學(xué)習(xí)模型可用于SQL來服務(wù)你所在的公司等等。
此外,我還將創(chuàng)建一個環(huán)境,在Deep Cognition Platform中使用此庫在筆記本上工作,以便測試所有內(nèi)容。如果您沒有一個賬號可以開始使用,請繼續(xù)創(chuàng)建一個免費(fèi)帳戶:
DeepCognition - 今天成為一家由AI支持的組織
設(shè)計(jì),訓(xùn)練和部署無需編碼的深度學(xué)習(xí)模型。深度學(xué)習(xí)工作室簡化和加速...
哦!!順便說一句,如果你現(xiàn)在想更多關(guān)于Python的數(shù)據(jù)科學(xué)流水線的信息,請查看馬修梅奧的這些精彩文章:
關(guān)于Spark上的流水線簡要介紹一下:
再見 :)