
Spark一種快速數(shù)據(jù)分析替代方案
Spark 是一種與 Hadoop 相似的開(kāi)源集群計(jì)算環(huán)境,但是兩者之間還存在一些不同之處,這些有用的不同之處使 Spark 在某些工作負(fù)載方面表現(xiàn)得更加優(yōu)越,換句話說(shuō),Spark 啟用了內(nèi)存分布數(shù)據(jù)集,除了能夠提供交互式查詢外,它還可以優(yōu)化迭代工作負(fù)載。
Spark 是在 Scala 語(yǔ)言中實(shí)現(xiàn)的,它將 Scala 用作其應(yīng)用程序框架。與 Hadoop 不同,Spark 和 Scala 能夠緊密集成,其中的 Scala 可以像操作本地集合對(duì)象一樣輕松地操作分布式數(shù)據(jù)集。
盡管創(chuàng)建 Spark 是為了支持分布式數(shù)據(jù)集上的迭代作業(yè),但是實(shí)際上它是對(duì) Hadoop 的補(bǔ)充,可以在 Hadoo 文件系統(tǒng)中并行運(yùn)行。通過(guò)名為 Mesos 的第三方集群框架可以支持此行為。Spark 由加州大學(xué)伯克利分校 AMP 實(shí)驗(yàn)室 (Algorithms, Machines, and People Lab) 開(kāi)發(fā),可用來(lái)構(gòu)建大型的、低延遲的數(shù)據(jù)分析應(yīng)用程序。
Spark 集群計(jì)算架構(gòu)
雖然 Spark 與 Hadoop 有相似之處,但它提供了具有有用差異的一個(gè)新的集群計(jì)算框架。首先,Spark 是為集群計(jì)算中的特定類(lèi)型的工作負(fù)載而設(shè)計(jì),即那些在并行操作之間重用工作數(shù)據(jù)集(比如機(jī)器學(xué)習(xí)算法)的工作負(fù)載。為了優(yōu)化這些類(lèi)型的工作負(fù)載,Spark 引進(jìn)了內(nèi)存集群計(jì)算的概念,可在內(nèi)存集群計(jì)算中將數(shù)據(jù)集緩存在內(nèi)存中,以縮短訪問(wèn)延遲。
Spark 還引進(jìn)了名為 彈性分布式數(shù)據(jù)集 (RDD) 的抽象。RDD 是分布在一組節(jié)點(diǎn)中的只讀對(duì)象集合。這些集合是彈性的,如果數(shù)據(jù)集一部分丟失,則可以對(duì)它們進(jìn)行重建。重建部分?jǐn)?shù)據(jù)集的過(guò)程依賴于容錯(cuò)機(jī)制,該機(jī)制可以維護(hù) “血統(tǒng)”(即充許基于數(shù)據(jù)衍生過(guò)程重建部分?jǐn)?shù)據(jù)集的信息)。RDD 被表示為一個(gè) Scala 對(duì)象,并且可以從文件中創(chuàng)建它;一個(gè)并行化的切片(遍布于節(jié)點(diǎn)之間);另一個(gè) RDD 的轉(zhuǎn)換形式;并且最終會(huì)徹底改變現(xiàn)有 RDD 的持久性,比如請(qǐng)求緩存在內(nèi)存中。
Spark 中的應(yīng)用程序稱為驅(qū)動(dòng)程序,這些驅(qū)動(dòng)程序可實(shí)現(xiàn)在單一節(jié)點(diǎn)上執(zhí)行的操作或在一組節(jié)點(diǎn)上并行執(zhí)行的操作。與 Hadoop 類(lèi)似,Spark 支持單節(jié)點(diǎn)集群或多節(jié)點(diǎn)集群。對(duì)于多節(jié)點(diǎn)操作,Spark 依賴于 Mesos 集群管理器。Mesos 為分布式應(yīng)用程序的資源共享和隔離提供了一個(gè)有效平臺(tái)(參見(jiàn) 圖 1)。該設(shè)置充許 Spark 與 Hadoop 共存于節(jié)點(diǎn)的一個(gè)共享池中。
圖 1. Spark 依賴于 Mesos 集群管理器實(shí)現(xiàn)資源共享和隔離。
Spark 編程模式
驅(qū)動(dòng)程序可以在數(shù)據(jù)集上執(zhí)行兩種類(lèi)型的操作:動(dòng)作和轉(zhuǎn)換。動(dòng)作 會(huì)在數(shù)據(jù)集上執(zhí)行一個(gè)計(jì)算,并向驅(qū)動(dòng)程序返回一個(gè)值;而轉(zhuǎn)換 會(huì)從現(xiàn)有數(shù)據(jù)集中創(chuàng)建一個(gè)新的數(shù)據(jù)集。動(dòng)作的示例包括執(zhí)行一個(gè) Reduce 操作(使用函數(shù))以及在數(shù)據(jù)集上進(jìn)行迭代(在每個(gè)元素上運(yùn)行一個(gè)函數(shù),類(lèi)似于 Map 操作)。轉(zhuǎn)換示例包括 Map 操作和 Cache 操作(它請(qǐng)求新的數(shù)據(jù)集存儲(chǔ)在內(nèi)存中)。
我們隨后就會(huì)看看這兩個(gè)操作的示例,但是,讓我們先來(lái)了解一下 Scala 語(yǔ)言。
Scala 簡(jiǎn)介
Scala 可能是 Internet 上不為人知的秘密之一。您可以在一些最繁忙的 Internet 網(wǎng)站(如 Twitter、LinkedIn 和 Foursquare,F(xiàn)oursquare 使用了名為 Lift 的 Web 應(yīng)用程序框架)的制作過(guò)程中看到 Scala 的身影。還有證據(jù)表明,許多金融機(jī)構(gòu)已開(kāi)始關(guān)注 Scala 的性能(比如 EDF Trading 公司將 Scala 用于衍生產(chǎn)品定價(jià))。
Scala 是一種多范式語(yǔ)言,它以一種流暢的、讓人感到舒服的方法支持與命令式、函數(shù)式和面向?qū)ο蟮恼Z(yǔ)言相關(guān)的語(yǔ)言特性。從面向?qū)ο蟮慕嵌葋?lái)看,Scala 中的每個(gè)值都是一個(gè)對(duì)象。同樣,從函數(shù)觀點(diǎn)來(lái)看,每個(gè)函數(shù)都是一個(gè)值。Scala 也是屬于靜態(tài)類(lèi)型,它有一個(gè)既有表現(xiàn)力又很安全的類(lèi)型系統(tǒng)。
此外,Scala 是一種虛擬機(jī) (VM) 語(yǔ)言,并且可以通過(guò) Scala 編譯器生成的字節(jié)碼,直接運(yùn)行在使用 Java Runtime Environment V2 的 Java? Virtual Machine (JVM) 上。該設(shè)置充許 Scala 運(yùn)行在運(yùn)行 JVM 的任何地方(要求一個(gè)額外的 Scala 運(yùn)行時(shí)庫(kù))。它還充許 Scala 利用大量現(xiàn)存的 Java 庫(kù)以及現(xiàn)有的 Java 代碼。
最后,Scala 具有可擴(kuò)展性。該語(yǔ)言(它實(shí)際上代表了可擴(kuò)展語(yǔ)言)被定義為可直接集成到語(yǔ)言中的簡(jiǎn)單擴(kuò)展。
Scala 的起源
Scala 語(yǔ)言由 Ecole Polytechnique Federale de Lausanne(瑞士洛桑市的兩所瑞士聯(lián)邦理工學(xué)院之一)開(kāi)發(fā)。它是 Martin Odersky 在開(kāi)發(fā)了名為 Funnel 的編程語(yǔ)言之后設(shè)計(jì)的,F(xiàn)unnel 集成了函數(shù)編程和 Petri net 中的創(chuàng)意。在 2011 年,Scala 設(shè)計(jì)團(tuán)隊(duì)從歐洲研究委員會(huì) (European Research Council) 那里獲得了 5 年的研究經(jīng)費(fèi),然后他們成立新公司 Typesafe,從商業(yè)上支持 Scala,接收籌款開(kāi)始相應(yīng)的運(yùn)作。
舉例說(shuō)明 Scala
讓我們來(lái)看一些實(shí)際的 Scala 語(yǔ)言示例。Scala 提供自身的解釋器,充許您以交互方式試用該語(yǔ)言。Scala 的有用處理已超出本文所涉及的范圍,但是您可以在 參考資料 中找到更多相關(guān)信息的鏈接。
清單 1 通過(guò) Scala 自身提供的解釋器開(kāi)始了快速了解 Scala 語(yǔ)言之旅。啟用 Scala 后,系統(tǒng)會(huì)給出提示,通過(guò)該提示,您可以以交互方式評(píng)估表達(dá)式和程序。我們首先創(chuàng)建了兩個(gè)變量,一個(gè)是不可變變量(即 vals,稱作單賦值),另一個(gè)變量是可變變量 (vars)。注意,當(dāng)您試圖更改 b(您的 var)時(shí),您可以成功地執(zhí)行此操作,但是,當(dāng)您試圖更改 val 時(shí),則會(huì)返回一個(gè)錯(cuò)誤。
清單 1. Scala 中的簡(jiǎn)單變量
$ 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
^
接下來(lái),創(chuàng)建一個(gè)簡(jiǎn)單的方法來(lái)計(jì)算和返回 Int 的平方值。在 Scala 中定義一個(gè)方法得先從def 開(kāi)始,后跟方法名稱和參數(shù)列表,然后,要將它設(shè)置為語(yǔ)句的數(shù)量(在本示例中為 1)。無(wú)需指定任何返回值,因?yàn)榭梢詮姆椒ū旧硗茢喑鲈撝怠W⒁?,這類(lèi)似于為變量賦值。在一個(gè)名為 3的對(duì)象和一個(gè)名為 res0 的結(jié)果變量(Scala 解釋器會(huì)自動(dòng)為您創(chuàng)建該變量)上,我演示了這個(gè)過(guò)程。這些都顯示在 清單 2 中。
清單 2. Scala 中的一個(gè)簡(jiǎn)單方法
scala> def square(x: Int) = x*xsquare: (x: Int)Int
scala> square(3)res0: Int = 9
scala> square(res0)res1: Int = 81
接下來(lái),讓我們看一下 Scala 中的一個(gè)簡(jiǎn)單類(lèi)的構(gòu)建過(guò)程(參見(jiàn) 清單 3)。定義一個(gè)簡(jiǎn)單的Dog 類(lèi)來(lái)接收一個(gè) String 參數(shù)(您的名稱構(gòu)造函數(shù))。注意,這里的類(lèi)直接采用了該參數(shù)(無(wú)需在類(lèi)的正文中定義類(lèi)參數(shù))。還有一個(gè)定義該參數(shù)的方法,可在調(diào)用參數(shù)時(shí)發(fā)送一個(gè)字符串。您要?jiǎng)?chuàng)建一個(gè)新的類(lèi)實(shí)例,然后調(diào)用您的方法。注意,解釋器會(huì)插入一些豎線:它們不屬于代碼。
清單 3. Scala 中的一個(gè)簡(jiǎn)單的類(lèi)
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ù)分析咨詢請(qǐng)掃描二維碼
若不方便掃碼,搜微信號(hào):CDAshujufenxi
SQL Server 中 CONVERT 函數(shù)的日期轉(zhuǎn)換:從基礎(chǔ)用法到實(shí)戰(zhàn)優(yōu)化 在 SQL Server 的數(shù)據(jù)處理中,日期格式轉(zhuǎn)換是高頻需求 —— 無(wú)論 ...
2025-09-18MySQL 大表拆分與關(guān)聯(lián)查詢效率:打破 “拆分必慢” 的認(rèn)知誤區(qū) 在 MySQL 數(shù)據(jù)庫(kù)管理中,“大表” 始終是性能優(yōu)化繞不開(kāi)的話題。 ...
2025-09-18CDA 數(shù)據(jù)分析師:表結(jié)構(gòu)數(shù)據(jù) “獲取 - 加工 - 使用” 全流程的賦能者 表結(jié)構(gòu)數(shù)據(jù)(如數(shù)據(jù)庫(kù)表、Excel 表、CSV 文件)是企業(yè)數(shù)字 ...
2025-09-18DSGE 模型中的 Et:理性預(yù)期算子的內(nèi)涵、作用與應(yīng)用解析 動(dòng)態(tài)隨機(jī)一般均衡(Dynamic Stochastic General Equilibrium, DSGE)模 ...
2025-09-17Python 提取 TIF 中地名的完整指南 一、先明確:TIF 中的地名有哪兩種存在形式? 在開(kāi)始提取前,需先判斷 TIF 文件的類(lèi)型 —— ...
2025-09-17CDA 數(shù)據(jù)分析師:解鎖表結(jié)構(gòu)數(shù)據(jù)特征價(jià)值的專業(yè)核心 表結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 規(guī)范存儲(chǔ)的結(jié)構(gòu)化數(shù)據(jù),如數(shù)據(jù)庫(kù)表、Excel 表、 ...
2025-09-17Excel 導(dǎo)入數(shù)據(jù)含缺失值?詳解 dropna 函數(shù)的功能與實(shí)戰(zhàn)應(yīng)用 在用 Python(如 pandas 庫(kù))處理 Excel 數(shù)據(jù)時(shí),“缺失值” 是高頻 ...
2025-09-16深入解析卡方檢驗(yàn)與 t 檢驗(yàn):差異、適用場(chǎng)景與實(shí)踐應(yīng)用 在數(shù)據(jù)分析與統(tǒng)計(jì)學(xué)領(lǐng)域,假設(shè)檢驗(yàn)是驗(yàn)證研究假設(shè)、判斷數(shù)據(jù)差異是否 “ ...
2025-09-16CDA 數(shù)據(jù)分析師:掌控表格結(jié)構(gòu)數(shù)據(jù)全功能周期的專業(yè)操盤(pán)手 表格結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 存儲(chǔ)的結(jié)構(gòu)化數(shù)據(jù),如 Excel 表、數(shù)據(jù) ...
2025-09-16MySQL 執(zhí)行計(jì)劃中 rows 數(shù)量的準(zhǔn)確性解析:原理、影響因素與優(yōu)化 在 MySQL SQL 調(diào)優(yōu)中,EXPLAIN執(zhí)行計(jì)劃是核心工具,而其中的row ...
2025-09-15解析 Python 中 Response 對(duì)象的 text 與 content:區(qū)別、場(chǎng)景與實(shí)踐指南 在 Python 進(jìn)行 HTTP 網(wǎng)絡(luò)請(qǐng)求開(kāi)發(fā)時(shí)(如使用requests ...
2025-09-15CDA 數(shù)據(jù)分析師:激活表格結(jié)構(gòu)數(shù)據(jù)價(jià)值的核心操盤(pán)手 表格結(jié)構(gòu)數(shù)據(jù)(如 Excel 表格、數(shù)據(jù)庫(kù)表)是企業(yè)最基礎(chǔ)、最核心的數(shù)據(jù)形態(tài) ...
2025-09-15Python HTTP 請(qǐng)求工具對(duì)比:urllib.request 與 requests 的核心差異與選擇指南 在 Python 處理 HTTP 請(qǐng)求(如接口調(diào)用、數(shù)據(jù)爬取 ...
2025-09-12解決 pd.read_csv 讀取長(zhǎng)浮點(diǎn)數(shù)據(jù)的科學(xué)計(jì)數(shù)法問(wèn)題 為幫助 Python 數(shù)據(jù)從業(yè)者解決pd.read_csv讀取長(zhǎng)浮點(diǎn)數(shù)據(jù)時(shí)的科學(xué)計(jì)數(shù)法問(wèn)題 ...
2025-09-12CDA 數(shù)據(jù)分析師:業(yè)務(wù)數(shù)據(jù)分析步驟的落地者與價(jià)值優(yōu)化者 業(yè)務(wù)數(shù)據(jù)分析是企業(yè)解決日常運(yùn)營(yíng)問(wèn)題、提升執(zhí)行效率的核心手段,其價(jià)值 ...
2025-09-12用 SQL 驗(yàn)證業(yè)務(wù)邏輯:從規(guī)則拆解到數(shù)據(jù)把關(guān)的實(shí)戰(zhàn)指南 在業(yè)務(wù)系統(tǒng)落地過(guò)程中,“業(yè)務(wù)邏輯” 是連接 “需求設(shè)計(jì)” 與 “用戶體驗(yàn) ...
2025-09-11塔吉特百貨孕婦營(yíng)銷(xiāo)案例:數(shù)據(jù)驅(qū)動(dòng)下的精準(zhǔn)零售革命與啟示 在零售行業(yè) “流量紅利見(jiàn)頂” 的當(dāng)下,精準(zhǔn)營(yíng)銷(xiāo)成為企業(yè)突圍的核心方 ...
2025-09-11CDA 數(shù)據(jù)分析師與戰(zhàn)略 / 業(yè)務(wù)數(shù)據(jù)分析:概念辨析與協(xié)同價(jià)值 在數(shù)據(jù)驅(qū)動(dòng)決策的體系中,“戰(zhàn)略數(shù)據(jù)分析”“業(yè)務(wù)數(shù)據(jù)分析” 是企業(yè) ...
2025-09-11Excel 數(shù)據(jù)聚類(lèi)分析:從操作實(shí)踐到業(yè)務(wù)價(jià)值挖掘 在數(shù)據(jù)分析場(chǎng)景中,聚類(lèi)分析作為 “無(wú)監(jiān)督分組” 的核心工具,能從雜亂數(shù)據(jù)中挖 ...
2025-09-10統(tǒng)計(jì)模型的核心目的:從數(shù)據(jù)解讀到?jīng)Q策支撐的價(jià)值導(dǎo)向 統(tǒng)計(jì)模型作為數(shù)據(jù)分析的核心工具,并非簡(jiǎn)單的 “公式堆砌”,而是圍繞特定 ...
2025-09-10