
Spark一種快速數(shù)據(jù)分析替代方案
Spark 是一種與 Hadoop 相似的開源集群計算環(huán)境,但是兩者之間還存在一些不同之處,這些有用的不同之處使 Spark 在某些工作負(fù)載方面表現(xiàn)得更加優(yōu)越,換句話說,Spark 啟用了內(nèi)存分布數(shù)據(jù)集,除了能夠提供交互式查詢外,它還可以優(yōu)化迭代工作負(fù)載。
Spark 是在 Scala 語言中實現(xiàn)的,它將 Scala 用作其應(yīng)用程序框架。與 Hadoop 不同,Spark 和 Scala 能夠緊密集成,其中的 Scala 可以像操作本地集合對象一樣輕松地操作分布式數(shù)據(jù)集。
盡管創(chuàng)建 Spark 是為了支持分布式數(shù)據(jù)集上的迭代作業(yè),但是實際上它是對 Hadoop 的補充,可以在 Hadoo 文件系統(tǒng)中并行運行。通過名為 Mesos 的第三方集群框架可以支持此行為。Spark 由加州大學(xué)伯克利分校 AMP 實驗室 (Algorithms, Machines, and People Lab) 開發(fā),可用來構(gòu)建大型的、低延遲的數(shù)據(jù)分析應(yīng)用程序。
Spark 集群計算架構(gòu)
雖然 Spark 與 Hadoop 有相似之處,但它提供了具有有用差異的一個新的集群計算框架。首先,Spark 是為集群計算中的特定類型的工作負(fù)載而設(shè)計,即那些在并行操作之間重用工作數(shù)據(jù)集(比如機(jī)器學(xué)習(xí)算法)的工作負(fù)載。為了優(yōu)化這些類型的工作負(fù)載,Spark 引進(jìn)了內(nèi)存集群計算的概念,可在內(nèi)存集群計算中將數(shù)據(jù)集緩存在內(nèi)存中,以縮短訪問延遲。
Spark 還引進(jìn)了名為 彈性分布式數(shù)據(jù)集 (RDD) 的抽象。RDD 是分布在一組節(jié)點中的只讀對象集合。這些集合是彈性的,如果數(shù)據(jù)集一部分丟失,則可以對它們進(jìn)行重建。重建部分?jǐn)?shù)據(jù)集的過程依賴于容錯機(jī)制,該機(jī)制可以維護(hù) “血統(tǒng)”(即充許基于數(shù)據(jù)衍生過程重建部分?jǐn)?shù)據(jù)集的信息)。RDD 被表示為一個 Scala 對象,并且可以從文件中創(chuàng)建它;一個并行化的切片(遍布于節(jié)點之間);另一個 RDD 的轉(zhuǎn)換形式;并且最終會徹底改變現(xiàn)有 RDD 的持久性,比如請求緩存在內(nèi)存中。
Spark 中的應(yīng)用程序稱為驅(qū)動程序,這些驅(qū)動程序可實現(xiàn)在單一節(jié)點上執(zhí)行的操作或在一組節(jié)點上并行執(zhí)行的操作。與 Hadoop 類似,Spark 支持單節(jié)點集群或多節(jié)點集群。對于多節(jié)點操作,Spark 依賴于 Mesos 集群管理器。Mesos 為分布式應(yīng)用程序的資源共享和隔離提供了一個有效平臺(參見 圖 1)。該設(shè)置充許 Spark 與 Hadoop 共存于節(jié)點的一個共享池中。
圖 1. Spark 依賴于 Mesos 集群管理器實現(xiàn)資源共享和隔離。
Spark 編程模式
驅(qū)動程序可以在數(shù)據(jù)集上執(zhí)行兩種類型的操作:動作和轉(zhuǎn)換。動作 會在數(shù)據(jù)集上執(zhí)行一個計算,并向驅(qū)動程序返回一個值;而轉(zhuǎn)換 會從現(xiàn)有數(shù)據(jù)集中創(chuàng)建一個新的數(shù)據(jù)集。動作的示例包括執(zhí)行一個 Reduce 操作(使用函數(shù))以及在數(shù)據(jù)集上進(jìn)行迭代(在每個元素上運行一個函數(shù),類似于 Map 操作)。轉(zhuǎn)換示例包括 Map 操作和 Cache 操作(它請求新的數(shù)據(jù)集存儲在內(nèi)存中)。
我們隨后就會看看這兩個操作的示例,但是,讓我們先來了解一下 Scala 語言。
Scala 簡介
Scala 可能是 Internet 上不為人知的秘密之一。您可以在一些最繁忙的 Internet 網(wǎng)站(如 Twitter、LinkedIn 和 Foursquare,F(xiàn)oursquare 使用了名為 Lift 的 Web 應(yīng)用程序框架)的制作過程中看到 Scala 的身影。還有證據(jù)表明,許多金融機(jī)構(gòu)已開始關(guān)注 Scala 的性能(比如 EDF Trading 公司將 Scala 用于衍生產(chǎn)品定價)。
Scala 是一種多范式語言,它以一種流暢的、讓人感到舒服的方法支持與命令式、函數(shù)式和面向?qū)ο蟮恼Z言相關(guān)的語言特性。從面向?qū)ο蟮慕嵌葋砜矗琒cala 中的每個值都是一個對象。同樣,從函數(shù)觀點來看,每個函數(shù)都是一個值。Scala 也是屬于靜態(tài)類型,它有一個既有表現(xiàn)力又很安全的類型系統(tǒng)。
此外,Scala 是一種虛擬機(jī) (VM) 語言,并且可以通過 Scala 編譯器生成的字節(jié)碼,直接運行在使用 Java Runtime Environment V2 的 Java? Virtual Machine (JVM) 上。該設(shè)置充許 Scala 運行在運行 JVM 的任何地方(要求一個額外的 Scala 運行時庫)。它還充許 Scala 利用大量現(xiàn)存的 Java 庫以及現(xiàn)有的 Java 代碼。
最后,Scala 具有可擴(kuò)展性。該語言(它實際上代表了可擴(kuò)展語言)被定義為可直接集成到語言中的簡單擴(kuò)展。
Scala 的起源
Scala 語言由 Ecole Polytechnique Federale de Lausanne(瑞士洛桑市的兩所瑞士聯(lián)邦理工學(xué)院之一)開發(fā)。它是 Martin Odersky 在開發(fā)了名為 Funnel 的編程語言之后設(shè)計的,F(xiàn)unnel 集成了函數(shù)編程和 Petri net 中的創(chuàng)意。在 2011 年,Scala 設(shè)計團(tuán)隊從歐洲研究委員會 (European Research Council) 那里獲得了 5 年的研究經(jīng)費,然后他們成立新公司 Typesafe,從商業(yè)上支持 Scala,接收籌款開始相應(yīng)的運作。
舉例說明 Scala
讓我們來看一些實際的 Scala 語言示例。Scala 提供自身的解釋器,充許您以交互方式試用該語言。Scala 的有用處理已超出本文所涉及的范圍,但是您可以在 參考資料 中找到更多相關(guān)信息的鏈接。
清單 1 通過 Scala 自身提供的解釋器開始了快速了解 Scala 語言之旅。啟用 Scala 后,系統(tǒng)會給出提示,通過該提示,您可以以交互方式評估表達(dá)式和程序。我們首先創(chuàng)建了兩個變量,一個是不可變變量(即 vals,稱作單賦值),另一個變量是可變變量 (vars)。注意,當(dāng)您試圖更改 b(您的 var)時,您可以成功地執(zhí)行此操作,但是,當(dāng)您試圖更改 val 時,則會返回一個錯誤。
清單 1. Scala 中的簡單變量
$ scalaWelcome to Scala version 2.8.1.final (OpenJDK Client VM, Java 1.6.0_20).
Type in expressions to have them evaluated.
Type :help for more information.
scala> val a = 1a: Int = 1
scala> var b = 2b: Int = 2
scala> b = b + ab: Int = 3
scala> a = 26: error: reassignment to val
a = 2
^
接下來,創(chuàng)建一個簡單的方法來計算和返回 Int 的平方值。在 Scala 中定義一個方法得先從def 開始,后跟方法名稱和參數(shù)列表,然后,要將它設(shè)置為語句的數(shù)量(在本示例中為 1)。無需指定任何返回值,因為可以從方法本身推斷出該值。注意,這類似于為變量賦值。在一個名為 3的對象和一個名為 res0 的結(jié)果變量(Scala 解釋器會自動為您創(chuàng)建該變量)上,我演示了這個過程。這些都顯示在 清單 2 中。
清單 2. Scala 中的一個簡單方法
scala> def square(x: Int) = x*xsquare: (x: Int)Int
scala> square(3)res0: Int = 9
scala> square(res0)res1: Int = 81
接下來,讓我們看一下 Scala 中的一個簡單類的構(gòu)建過程(參見 清單 3)。定義一個簡單的Dog 類來接收一個 String 參數(shù)(您的名稱構(gòu)造函數(shù))。注意,這里的類直接采用了該參數(shù)(無需在類的正文中定義類參數(shù))。還有一個定義該參數(shù)的方法,可在調(diào)用參數(shù)時發(fā)送一個字符串。您要創(chuàng)建一個新的類實例,然后調(diào)用您的方法。注意,解釋器會插入一些豎線:它們不屬于代碼。
清單 3. Scala 中的一個簡單的類
scala> class Dog( name: String ) {
| def bark() = println(name + " barked")
| }defined class Dog
scala> val stubby = new Dog("Stubby")stubby: Dog = Dog@1dd5a3d
scala> stubby.barkStubby barked
scala>
完成上述操作后,只需輸入 :quit 即可退出 Scala 解釋器。
數(shù)據(jù)分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
LSTM 模型輸入長度選擇技巧:提升序列建模效能的關(guān)鍵? 在循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)家族中,長短期記憶網(wǎng)絡(luò)(LSTM)憑借其解決長序列 ...
2025-07-11CDA 數(shù)據(jù)分析師報考條件詳解與準(zhǔn)備指南? ? 在數(shù)據(jù)驅(qū)動決策的時代浪潮下,CDA 數(shù)據(jù)分析師認(rèn)證愈發(fā)受到矚目,成為眾多有志投身數(shù) ...
2025-07-11數(shù)據(jù)透視表中兩列相乘合計的實用指南? 在數(shù)據(jù)分析的日常工作中,數(shù)據(jù)透視表憑借其強(qiáng)大的數(shù)據(jù)匯總和分析功能,成為了 Excel 用戶 ...
2025-07-11尊敬的考生: 您好! 我們誠摯通知您,CDA Level I和 Level II考試大綱將于 2025年7月25日 實施重大更新。 此次更新旨在確保認(rèn) ...
2025-07-10BI 大數(shù)據(jù)分析師:連接數(shù)據(jù)與業(yè)務(wù)的價值轉(zhuǎn)化者? ? 在大數(shù)據(jù)與商業(yè)智能(Business Intelligence,簡稱 BI)深度融合的時代,BI ...
2025-07-10SQL 在預(yù)測分析中的應(yīng)用:從數(shù)據(jù)查詢到趨勢預(yù)判? ? 在數(shù)據(jù)驅(qū)動決策的時代,預(yù)測分析作為挖掘數(shù)據(jù)潛在價值的核心手段,正被廣泛 ...
2025-07-10數(shù)據(jù)查詢結(jié)束后:分析師的收尾工作與價值深化? ? 在數(shù)據(jù)分析的全流程中,“query end”(查詢結(jié)束)并非工作的終點,而是將數(shù) ...
2025-07-10CDA 數(shù)據(jù)分析師考試:從報考到取證的全攻略? 在數(shù)字經(jīng)濟(jì)蓬勃發(fā)展的今天,數(shù)據(jù)分析師已成為各行業(yè)爭搶的核心人才,而 CDA(Certi ...
2025-07-09【CDA干貨】單樣本趨勢性檢驗:捕捉數(shù)據(jù)背后的時間軌跡? 在數(shù)據(jù)分析的版圖中,單樣本趨勢性檢驗如同一位耐心的偵探,專注于從單 ...
2025-07-09year_month數(shù)據(jù)類型:時間維度的精準(zhǔn)切片? ? 在數(shù)據(jù)的世界里,時間是最不可或缺的維度之一,而year_month數(shù)據(jù)類型就像一把精準(zhǔn) ...
2025-07-09CDA 備考干貨:Python 在數(shù)據(jù)分析中的核心應(yīng)用與實戰(zhàn)技巧? ? 在 CDA 數(shù)據(jù)分析師認(rèn)證考試中,Python 作為數(shù)據(jù)處理與分析的核心 ...
2025-07-08SPSS 中的 Mann-Kendall 檢驗:數(shù)據(jù)趨勢與突變分析的有力工具? ? ? 在數(shù)據(jù)分析的廣袤領(lǐng)域中,準(zhǔn)確捕捉數(shù)據(jù)的趨勢變化以及識別 ...
2025-07-08備戰(zhàn) CDA 數(shù)據(jù)分析師考試:需要多久?如何規(guī)劃? CDA(Certified Data Analyst)數(shù)據(jù)分析師認(rèn)證作為國內(nèi)權(quán)威的數(shù)據(jù)分析能力認(rèn)證 ...
2025-07-08LSTM 輸出不確定的成因、影響與應(yīng)對策略? 長短期記憶網(wǎng)絡(luò)(LSTM)作為循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的一種變體,憑借獨特的門控機(jī)制,在 ...
2025-07-07統(tǒng)計學(xué)方法在市場調(diào)研數(shù)據(jù)中的深度應(yīng)用? 市場調(diào)研是企業(yè)洞察市場動態(tài)、了解消費者需求的重要途徑,而統(tǒng)計學(xué)方法則是市場調(diào)研數(shù) ...
2025-07-07CDA數(shù)據(jù)分析師證書考試全攻略? 在數(shù)字化浪潮席卷全球的當(dāng)下,數(shù)據(jù)已成為企業(yè)決策、行業(yè)發(fā)展的核心驅(qū)動力,數(shù)據(jù)分析師也因此成為 ...
2025-07-07剖析 CDA 數(shù)據(jù)分析師考試題型:解鎖高效備考與答題策略? CDA(Certified Data Analyst)數(shù)據(jù)分析師考試作為衡量數(shù)據(jù)專業(yè)能力的 ...
2025-07-04SQL Server 字符串截取轉(zhuǎn)日期:解鎖數(shù)據(jù)處理的關(guān)鍵技能? 在數(shù)據(jù)處理與分析工作中,數(shù)據(jù)格式的規(guī)范性是保證后續(xù)分析準(zhǔn)確性的基礎(chǔ) ...
2025-07-04CDA 數(shù)據(jù)分析師視角:從數(shù)據(jù)迷霧中探尋商業(yè)真相? 在數(shù)字化浪潮席卷全球的今天,數(shù)據(jù)已成為企業(yè)決策的核心驅(qū)動力,CDA(Certifie ...
2025-07-04CDA 數(shù)據(jù)分析師:開啟數(shù)據(jù)職業(yè)發(fā)展新征程? ? 在數(shù)據(jù)成為核心生產(chǎn)要素的今天,數(shù)據(jù)分析師的職業(yè)價值愈發(fā)凸顯。CDA(Certified D ...
2025-07-03