park大數(shù)據(jù)分析與挖掘

| 2022-09-29 admin

當(dāng)我們每天面對(duì)撲面而來(lái)的海量數(shù)據(jù)時(shí),是戰(zhàn)斗還是退卻,是去挖掘其中蘊(yùn)含的無(wú)限資源,還是讓它們自生自滅?我們的答案是:“一切都取決于你自己”。對(duì)于海量而龐大的數(shù)據(jù)來(lái)說(shuō),在不同人眼里,既可以是一座亟待銷(xiāo)毀的垃圾場(chǎng),也可以是一個(gè)埋藏有無(wú)限珍寶的金銀島,這一切都取決于操控者的眼界與能力。本書(shū)的目的就是希望所有的大數(shù)據(jù)技術(shù)人員都有這種挖掘金礦的能力!

大數(shù)據(jù)時(shí)代

什么是“大數(shù)據(jù)”?一篇名為 “互聯(lián)網(wǎng)上一天”的文章告訴我們:

一天之中,互聯(lián)網(wǎng)上產(chǎn)生的全部?jī)?nèi)容可以刻滿 1.68 億張 DVD,發(fā)出的郵件有2940 億封之多(相當(dāng)于美國(guó)兩年的紙質(zhì)信件數(shù)量),發(fā)出的社區(qū)帖子達(dá)200萬(wàn)個(gè)(相當(dāng)于《時(shí)代》雜志770 年的文字量),賣(mài)出的手機(jī)數(shù)量為 37.8萬(wàn)臺(tái),比全球每天出生的嬰兒數(shù)量高出 37.1萬(wàn)。

正如人們常說(shuō)的一句話:“冰山只露出它的一角”。大數(shù)據(jù)也是如此,“人們看到的只是其露出水面的那一部分,而更多的則是隱藏在水面下”。隨著時(shí)代的飛速發(fā)展,信息傳播的速度越來(lái)越快,手段也日益繁多,數(shù)據(jù)的種類和格式趨于復(fù)雜和豐富,并且在存儲(chǔ)上已經(jīng)突破了傳統(tǒng)的結(jié)構(gòu)化存儲(chǔ)形式,向著非結(jié)構(gòu)存儲(chǔ)飛速發(fā)展。大數(shù)據(jù)科學(xué)家 JohnRauser 提到一個(gè)簡(jiǎn)單的定義:“大數(shù)據(jù)就是任何超過(guò)了一臺(tái)計(jì)算機(jī)處理能力的龐大數(shù)據(jù)量”。亞馬遜網(wǎng)絡(luò)服務(wù) CAWS)研發(fā)小組對(duì)大數(shù)據(jù)的定義:“大數(shù)據(jù)是最大的宣傳技術(shù),也是最時(shí)髦的技術(shù),當(dāng)這種現(xiàn)象出現(xiàn)時(shí),定義就變得很混亂。” Kely 說(shuō):“大數(shù)據(jù)可能不包含所有的信息,但是我覺(jué)得大部分是正確的。對(duì)大數(shù)據(jù)的一部分認(rèn)知在于它是如此之大,分析它需要多個(gè)工作負(fù)載,這是AWS 的定義。當(dāng)你的技術(shù)達(dá)到極限時(shí)也就是數(shù)據(jù)的極限”

飛速產(chǎn)生的數(shù)據(jù)構(gòu)建了大數(shù)據(jù),海量數(shù)據(jù)的時(shí)代稱為大數(shù)據(jù)時(shí)代。但是,簡(jiǎn)單地認(rèn)為那些掌握了海量存儲(chǔ)數(shù)據(jù)資料的人是大數(shù)據(jù)強(qiáng)者顯然是不對(duì)的。真正的強(qiáng)者是那些能夠挖掘出隱藏在海量數(shù)據(jù)背后獲取其中所包含的巨量數(shù)據(jù)信息與內(nèi)容的人,是那些掌握專門(mén)技能懂得怎樣對(duì)數(shù)據(jù)進(jìn)行有目的、有方向處理的人。只有那些人,才能夠挖掘出真正隱藏的寶庫(kù),拾取金山中的珍寶,從而實(shí)現(xiàn)數(shù)據(jù)的增值,讓大數(shù)據(jù)“為我所用”。

大數(shù)據(jù)分析的要素

可以說(shuō),大數(shù)據(jù)時(shí)代最重要的技能是掌握對(duì)大數(shù)據(jù)的分析能力。只有通過(guò)對(duì)大數(shù)據(jù)的分析,提煉出其中所包含的有價(jià)值的內(nèi)容才能夠真正做到 “為我所用”。換言之,如果把大數(shù)據(jù)比作一塊洪土,那么只有強(qiáng)化對(duì)土地的“耕耘”能力才能通過(guò) “加工” 實(shí)現(xiàn)數(shù)據(jù)的 “增值” 一般來(lái)說(shuō),大數(shù)據(jù)分析涉及 5個(gè)要素。

1. 有效的數(shù)據(jù)質(zhì)量

任何數(shù)據(jù)分析都來(lái)自于真實(shí)的數(shù)據(jù)基礎(chǔ),而一個(gè)真實(shí)數(shù)據(jù)是采用標(biāo)準(zhǔn)化的流程和工具對(duì)數(shù)據(jù)進(jìn)行處理得到的,可以保證一個(gè)預(yù)先定義好的高質(zhì)量的分析結(jié)果。

2.優(yōu)秀的分析引擎

對(duì)于大數(shù)據(jù)來(lái)說(shuō),數(shù)據(jù)的來(lái)源多種多樣,特別是非結(jié)構(gòu)化數(shù)據(jù),其來(lái)源的多樣性給大數(shù)據(jù)分析帶來(lái)了新的挑戰(zhàn)。因此,我們需要一系列的工具去解析、提取、分析數(shù)據(jù)。大數(shù)據(jù)分析引擎用手從數(shù)據(jù)中提取我們所需要的信息。

3. 合適的分析算法

采用合適的大數(shù)據(jù)分析算法,能讓我們深入數(shù)據(jù)內(nèi)部挖掘價(jià)值。在算法的具體選擇上,不僅要考慮能夠處理的大數(shù)據(jù)數(shù)量,還要考慮對(duì)大數(shù)據(jù)處理的速度。

4. 對(duì)未來(lái)的合理預(yù)測(cè)

數(shù)據(jù)分析的目的是對(duì)已有數(shù)據(jù)體現(xiàn)出來(lái)的規(guī)律進(jìn)行總結(jié),并且將現(xiàn)象與其他情況緊密連接在一起,從而獲得對(duì)未來(lái)發(fā)展趨勢(shì)的預(yù)測(cè)。大數(shù)據(jù)分析也是如此。不同的是,在大數(shù)據(jù)分析中,數(shù)據(jù)來(lái)源的基礎(chǔ)更為廣泛,需要處理的方面更多。

5. 數(shù)據(jù)結(jié)果的可視化

大數(shù)據(jù)的分析結(jié)果更多的是為決策者和普通用戶提供決策支持和意見(jiàn)提示,其對(duì)較為深?yuàn)W的數(shù)學(xué)含義不會(huì)太了解。因此,必然要求數(shù)據(jù)的可視化能夠直觀地反映出經(jīng)過(guò)分析后得到的信息與內(nèi)容,能夠較為容易地被使用者所理解和接受。

可以說(shuō)大數(shù)據(jù)分析是數(shù)據(jù)分析最前沿的技術(shù)。這種新的數(shù)據(jù)分析是目標(biāo)導(dǎo)向的,不用關(guān)心數(shù)據(jù)的來(lái)源和具體格式,能夠根據(jù)我們的需求去處理各種結(jié)構(gòu)化、半結(jié)構(gòu)化和非結(jié)構(gòu)化的數(shù)據(jù),配合使用合適的分析引擎,能夠輸出有效結(jié)果,提供一定的對(duì)未來(lái)趨勢(shì)的預(yù)測(cè)分析服務(wù),能夠面向更廣泛的用戶快速部署數(shù)據(jù)分析應(yīng)用。

簡(jiǎn)單、優(yōu)雅、有效的Spark

Apache Spark 是加州大學(xué)伯克利分校的 AMPLabs 開(kāi)發(fā)的開(kāi)源分布式輕量級(jí)通用計(jì)算框架。與傳統(tǒng)的數(shù)據(jù)分析框架相比,Spark 在設(shè)計(jì)之初就是基于內(nèi)存而設(shè)計(jì)的,因此比一般的數(shù)據(jù)分析框架具有更高的處理性能,并且對(duì)多種編程語(yǔ)言(例如 Java、Scala 及Python 等)提供編譯支持,使得用戶使用傳統(tǒng)的編程語(yǔ)言即可進(jìn)行程序設(shè)計(jì),從而使得用戶的快速學(xué)習(xí)和代碼維護(hù)能力大大提高。

簡(jiǎn)單、優(yōu)雅、有效——這就是 Spark!

Spark 是一個(gè)簡(jiǎn)單的大數(shù)據(jù)處理框架,它可以幫助程序設(shè)計(jì)人員和數(shù)據(jù)分析人員在不了解分布式底層細(xì)節(jié)的情況下,編寫(xiě)一個(gè)簡(jiǎn)單的數(shù)據(jù)處理程序就可以對(duì)大數(shù)據(jù)進(jìn)行分析計(jì)算。

Spark 是一個(gè)優(yōu)雅的數(shù)據(jù)處理程序,借助于 Scala 函數(shù)式編程語(yǔ)言,以前往往幾百上千行的程序,這里只需短短十行即可完成。Spark 創(chuàng)新了數(shù)據(jù)獲取和處理的理念,簡(jiǎn)化了編程過(guò)程,不再需要建立索引來(lái)對(duì)數(shù)據(jù)進(jìn)行分類,通過(guò)相應(yīng)的表鏈接即可將需要的數(shù)據(jù)匹配成我們需要的格式。Spark 沒(méi)有臃腫,只有優(yōu)雅。

Spark 是一款有效的數(shù)據(jù)處理工具程序,充分利用集群的能力對(duì)數(shù)據(jù)進(jìn)行處理,其核心就是Mapeduoe數(shù)據(jù)處理。通過(guò)對(duì)數(shù)據(jù)的輸入、分拆與組合,可以有效地提高數(shù)據(jù)管理的安全性,同時(shí)能夠很好地訪問(wèn)管理的數(shù)據(jù)。

Spark 是建立在 JVM 上的開(kāi)源數(shù)據(jù)處理框架,開(kāi)創(chuàng)性地使用了一種從最底層結(jié)構(gòu)上就與現(xiàn)有技術(shù)完全不同,但足更加具有分進(jìn)性的款搬行飾和必理技木,這樣使用 Spark 時(shí)無(wú)需掌握系統(tǒng)的底層細(xì)節(jié),更不諾要購(gòu)買(mǎi)價(jià)格不菲的軟硬件平合。它借助于架設(shè)在普通商用機(jī)上的HDES 存儲(chǔ)系統(tǒng),就可以無(wú)限制地在價(jià)格低廉的商用 PC 上搭建所需要規(guī)模的評(píng)選數(shù)據(jù)分析平臺(tái)。即使從只有一臺(tái)商用 PC 的集群平臺(tái)開(kāi)始,也可以在后期任意擴(kuò)充其規(guī)模。

Spark 是基于 MapReduice 并行算法實(shí)現(xiàn)的分布式計(jì)算,其擁有 MapReduce 的優(yōu)點(diǎn),對(duì)數(shù)據(jù)分析細(xì)致而準(zhǔn)確。更進(jìn)一步,Spark 數(shù)據(jù)分析的結(jié)果可以保持在分布式框架的內(nèi)存中,從而使得下一步的計(jì)算不再頻繁地讀寫(xiě) HDFS,使得數(shù)據(jù)分析更加快速和方便。

提示:需要注意的是,Spark 并不是“僅”使用內(nèi)存作為分析和處理的存儲(chǔ)空間,而是和HDFS 交互使用,首先盡可能地采用內(nèi)存空間,當(dāng)內(nèi)存使用達(dá)到一定閾值時(shí),仍會(huì)將數(shù)據(jù)存儲(chǔ)在 HDFS 上。

除此之外,Spark通過(guò) HDFS 使用自帶的和自定義的特定數(shù)據(jù)格式 (RDD、DataFrame ),基本上可以按照程序設(shè)計(jì)人員的要求處理任何數(shù)據(jù)(音樂(lè)、電影、文本文件、Log 記錄等),而不論數(shù)據(jù)類型是什么樣的。編寫(xiě)相應(yīng)的 Spark 處理程序,可以幫助用戶獲得任何想要的答案。

有了Spark 后,再?zèng)]有數(shù)據(jù)被認(rèn)為是過(guò)于龐大而不好處理或不好存儲(chǔ)的,從而解決了之前無(wú)法解決的、對(duì)海量數(shù)據(jù)進(jìn)行分析的問(wèn)題,便于發(fā)現(xiàn)海量數(shù)據(jù)中潛在的價(jià)值。

Spark 3.0 核心--ML

首先談一下新舊版本MLlib 的區(qū)別ML和MLlib 都是 Spark 中的機(jī)器學(xué)習(xí)庫(kù),都能滿足目前常用的機(jī)器學(xué)習(xí)功能需求:Spank 官方推薦使用 ML,因?yàn)樗δ芨?、更靈活,未來(lái)會(huì)主要支持 ML, MLlib 很有可能會(huì)被廢棄。

ML 主要操作的是 DataFrame,而 MLlib操作的是 RDD,也就是說(shuō)二者面向的數(shù)據(jù)集不一樣。相比于 MLlib在RDD提供的基本操作,ML 在 DataFrame 上的抽象級(jí)別更高,數(shù)據(jù)和操作耦合度更低。ML 中的操作可以使用 Pipeline, 跟 Sklearn一樣,可以把很多操作(算法、特征提取、特征轉(zhuǎn)換)以管道的形式串起來(lái),然后讓數(shù)據(jù)在這個(gè)管道中流動(dòng)。ML 中無(wú)論是什么模型,都提供了統(tǒng)一的算法操作接口,比如模型訓(xùn)練都是fit。

如果將 Spark 比作一顆閃亮的星星,那么其中最明亮、最核心的部分就是 ML。ML是一個(gè)構(gòu)建在 Spark 上、專門(mén)針對(duì)大數(shù)據(jù)處理的并發(fā)式高性能機(jī)器學(xué)習(xí)庫(kù),其特點(diǎn)是采用較為先進(jìn)的選代式、內(nèi)存存儲(chǔ)的分析計(jì)算,使數(shù)據(jù)的計(jì)算處理速度大大高于普通的數(shù)據(jù)處理引擎。

ML 機(jī)器學(xué)習(xí)庫(kù)還在不停地更新中,Apache 的相關(guān)研究人員仍在不停地為其中添加更名的機(jī)器學(xué)習(xí)算法。目前 ML 中已經(jīng)有通用的學(xué)習(xí)算法和工具類,包括統(tǒng)計(jì)、分類、回歸、聚類、降維等。

對(duì)預(yù)處理后的數(shù)據(jù)進(jìn)行分析,從而獲得包含著數(shù)據(jù)內(nèi)容的結(jié)果。ML 作為 Spark 的核心處理引擎,在誕生之初就為處理大數(shù)據(jù)而采用了“分治式”的數(shù)據(jù)處理模式,將數(shù)據(jù)分散到各個(gè)節(jié)點(diǎn)中進(jìn)行相應(yīng)的處理。通過(guò)數(shù)據(jù)處理的“依賴” 關(guān)系,使處理過(guò)程層層遞進(jìn)。這個(gè)過(guò)程可以依據(jù)要求具體編寫(xiě),好處是避免了大數(shù)據(jù)處理框架所要求進(jìn)行的大規(guī)模數(shù)據(jù)傳輸,從而節(jié)省了時(shí)間、提高了處理效率。

ML 借助函數(shù)式程序設(shè)計(jì)思想,讓程序設(shè)計(jì)人員在編寫(xiě)程序的過(guò)程中只需要關(guān)注其數(shù)據(jù),而不必考慮函數(shù)調(diào)用順序,不用謹(jǐn)慎地設(shè)置外部狀態(tài)。所有要做的就是傳遞代表了邊際情況的參數(shù)。

ML 采用 Scala 語(yǔ)言編寫(xiě)。Scala 語(yǔ)言是運(yùn)行在JVM 上的一種函數(shù)式編程語(yǔ)言,特點(diǎn)是可移植性強(qiáng),最重要的特點(diǎn)是“一次編寫(xiě),到處運(yùn)行”。借助于 RDD 或 DataFrame 數(shù)據(jù)統(tǒng)一輸入格式,讓用戶可以在不同的 DDE 上編寫(xiě)數(shù)據(jù)處理程序,通過(guò)本地化測(cè)試后可以在略微修改運(yùn)行參數(shù)后直接在集群上運(yùn)行。對(duì)結(jié)果的獲取更為可視化和直觀,不會(huì)因?yàn)檫\(yùn)行系統(tǒng)底層的不同而造成結(jié)果的差異與改變。

ML是Spark 的核心內(nèi)容,也是其中最閃耀的部分。對(duì)數(shù)據(jù)的分析和處理是 Spark 的精髓,也是挖掘大數(shù)據(jù)這座寶山的金鋤頭。Spark 3.0 中的數(shù)據(jù)集使用 DataFrame 格式,并且支持使用管道 API 進(jìn)行運(yùn)算。它對(duì)機(jī)器學(xué)習(xí)算法的 API 進(jìn)行了標(biāo)準(zhǔn)化,以便更輕松地將多種算法組合到單個(gè)管道或工作流中。有了Pipeline之后,ML更適合創(chuàng)建包含從數(shù)據(jù)清洗到特征工程再到模型訓(xùn)練等一系列工作。