天天看點

​終于有人把Spark大資料分析與挖掘講明白了

當我們每天面對撲面而來的海量資料時,是戰鬥還是退卻,是去挖掘其中蘊含的無限資源,還是讓它們自生自滅?我們的答案是:“一切都取決于你自己”。對于海量而龐大的資料來說,在不同人眼裡,既可以是一座亟待銷毀的垃圾場,也可以是一個埋藏有無限珍寶的金銀島,這一切都取決于操控者的眼界與能力。本書的目的就是希望所有的大資料技術人員都有這種挖掘金礦的能力!

大資料時代

什麼是“大資料”?一篇名為 “網際網路上一天”的文章告訴我們:

一天之中,網際網路上産生的全部内容可以刻滿 1.68 億張 DVD,發出的郵件有2940 億封之多(相當于美國兩年的紙質信件數量),發出的社群文章達200萬個(相當于《時代》雜志770 年的文字量),賣出的手機數量為 37.8萬台,比全球每天出生的嬰兒數量高出 37.1萬。

正如人們常說的一句話:“冰山隻露出它的一角”。大資料也是如此,“人們看到的隻是其露出水面的那一部分,而更多的則是隐藏在水面下”。随着時代的飛速發展,資訊傳播的速度越來越快,手段也日益繁多,資料的種類和格式趨于複雜和豐富,并且在存儲上已經突破了傳統的結構化存儲形式,向着非結構存儲飛速發展。大資料科學家 JohnRauser 提到一個簡單的定義:“大資料就是任何超過了一台計算機處理能力的龐大資料量”。亞馬遜網絡服務 CAWS)研發小組對大資料的定義:“大資料是最大的宣傳技術,也是最時髦的技術,當這種現象出現時,定義就變得很混亂。” Kely 說:“大資料可能不包含所有的資訊,但是我覺得大部分是正确的。對大資料的一部分認知在于它是如此之大,分析它需要多個工作負載,這是AWS 的定義。當你的技術達到極限時也就是資料的極限”

飛速産生的資料建構了大資料,海量資料的時代稱為大資料時代。但是,簡單地認為那些掌握了海量存儲資料資料的人是大資料強者顯然是不對的。真正的強者是那些能夠挖掘出隐藏在海量資料背後擷取其中所包含的巨量資料資訊與内容的人,是那些掌握專門技能懂得怎樣對資料進行有目的、有方向處理的人。隻有那些人,才能夠挖掘出真正隐藏的寶庫,拾取金山中的珍寶,進而實作資料的增值,讓大資料“為我所用”。

大資料分析的要素

可以說,大資料時代最重要的技能是掌握對大資料的分析能力。隻有通過對大資料的分析,提煉出其中所包含的有價值的内容才能夠真正做到 “為我所用”。換言之,如果把大資料比作一塊洪土,那麼隻有強化對土地的“耕耘”能力才能通過 “加工” 實作資料的 “增值” 一般來說,大資料分析涉及 5個要素。

1. 有效的資料品質

任何資料分析都來自于真實的資料基礎,而一個真實資料是采用标準化的流程和工具對資料進行處理得到的,可以保證一個預先定義好的高品質的分析結果。

2.優秀的分析引擎

對于大資料來說,資料的來源多種多樣,特别是非結構化資料,其來源的多樣性給大資料分析帶來了新的挑戰。是以,我們需要一系列的工具去解析、提取、分析資料。大資料分析引擎用手從資料中提取我們所需要的資訊。

3. 合适的分析算法

采用合适的大資料分析算法,能讓我們深入資料内部挖掘價值。在算法的具體選擇上,不僅要考慮能夠處理的大資料數量,還要考慮對大資料處理的速度。

4. 對未來的合理預測

資料分析的目的是對已有資料展現出來的規律進行總結,并且将現象與其他情況緊密連接配接在一起,進而獲得對未來發展趨勢的預測。大資料分析也是如此。不同的是,在大資料分析中,資料來源的基礎更為廣泛,需要處理的方面更多。

5. 資料結果的可視化

大資料的分析結果更多的是為決策者和普通使用者提供決策支援和意見提示,其對較為深奧的數學含義不會太了解。是以,必然要求資料的可視化能夠直覺地反映出經過分析後得到的資訊與内容,能夠較為容易地被使用者所了解和接受。

可以說大資料分析是資料分析最前沿的技術。這種新的資料分析是目标導向的,不用關心資料的來源和具體格式,能夠根據我們的需求去處理各種結構化、半結構化和非結構化的資料,配合使用合适的分析引擎,能夠輸出有效結果,提供一定的對未來趨勢的預測分析服務,能夠面向更廣泛的使用者快速部署資料分析應用。

簡單、優雅、有效的Spark

Apache Spark 是加州大學伯克利分校的 AMPLabs 開發的開源分布式輕量級通用計算架構。與傳統的資料分析架構相比,Spark 在設計之初就是基于記憶體而設計的,是以比一般的資料分析架構具有更高的處理性能,并且對多種程式設計語言(例如 Java、Scala 及Python 等)提供編譯支援,使得使用者使用傳統的程式設計語言即可進行程式設計,進而使得使用者的快速學習和代碼維護能力大大提高。

簡單、優雅、有效——這就是 Spark!

Spark 是一個簡單的大資料處理架構,它可以幫助程式設計人員和資料分析人員在不了解分布式底層細節的情況下,編寫一個簡單的資料處理程式就可以對大資料進行分析計算。

Spark 是一個優雅的資料處理程式,借助于 Scala 函數式程式設計語言,以前往往幾百上千行的程式,這裡隻需短短十行即可完成。Spark 創新了資料擷取和處理的理念,簡化了程式設計過程,不再需要建立索引來對資料進行分類,通過相應的表連結即可将需要的資料比對成我們需要的格式。Spark 沒有臃腫,隻有優雅。

Spark 是一款有效的資料處理工具程式,充分利用叢集的能力對資料進行處理,其核心就是Mapeduoe資料處理。通過對資料的輸入、分拆與組合,可以有效地提高資料管理的安全性,同時能夠很好地通路管理的資料。

Spark 是建立在 JVM 上的開源資料處理架構,開創性地使用了一種從最底層結構上就與現有技術完全不同,但足更加具有分進性的款搬行飾和必理技木,這樣使用 Spark 時無需掌握系統的底層細節,更不諾要購買價格不菲的軟硬體平合。它借助于架設在普通商用機上的HDES 存儲系統,就可以無限制地在價格低廉的商用 PC 上搭建所需要規模的評選資料分析平台。即使從隻有一台商用 PC 的叢集平台開始,也可以在後期任意擴充其規模。

Spark 是基于 MapReduice 并行算法實作的分布式計算,其擁有 MapReduce 的優點,對資料分析細緻而準确。更進一步,Spark 資料分析的結果可以保持在分布式架構的記憶體中,進而使得下一步的計算不再頻繁地讀寫 HDFS,使得資料分析更加快速和友善。

提示:需要注意的是,Spark 并不是“僅”使用記憶體作為分析和處理的存儲空間,而是和HDFS 互動使用,首先盡可能地采用記憶體空間,當記憶體使用達到一定門檻值時,仍會将資料存儲在 HDFS 上。

除此之外,Spark通過 HDFS 使用自帶的和自定義的特定資料格式 (RDD、DataFrame ),基本上可以按照程式設計人員的要求處理任何資料(音樂、電影、文本檔案、Log 記錄等),而不論資料類型是什麼樣的。編寫相應的 Spark 處理程式,可以幫助使用者獲得任何想要的答案。

有了Spark 後,再沒有資料被認為是過于龐大而不好處理或不好存儲的,進而解決了之前無法解決的、對海量資料進行分析的問題,便于發現海量資料中潛在的價值。

Spark 3.0 核心--ML

首先談一下新舊版本MLlib 的差別ML和MLlib 都是 Spark 中的機器學習庫,都能滿足目前常用的機器學習功能需求:Spank 官方推薦使用 ML,因為它功能更全面、更靈活,未來會主要支援 ML, MLlib 很有可能會被廢棄。

ML 主要操作的是 DataFrame,而 MLlib操作的是 RDD,也就是說二者面向的資料集不一樣。相比于 MLlib在RDD提供的基本操作,ML 在 DataFrame 上的抽象級别更高,資料和操作耦合度更低。ML 中的操作可以使用 Pipeline, 跟 Sklearn一樣,可以把很多操作(算法、特征提取、特征轉換)以管道的形式串起來,然後讓資料在這個管道中流動。ML 中無論是什麼模型,都提供了統一的算法操作接口,比如模型訓練都是fit。

如果将 Spark 比作一顆閃亮的星星,那麼其中最明亮、最核心的部分就是 ML。ML是一個建構在 Spark 上、專門針對大資料處理的并發式高性能機器學習庫,其特點是采用較為先進的選代式、記憶體存儲的分析計算,使資料的計算處理速度大大高于普通的資料處理引擎。

ML 機器學習庫還在不停地更新中,Apache 的相關研究人員仍在不停地為其中添加更名的機器學習算法。目前 ML 中已經有通用的學習算法和工具類,包括統計、分類、回歸、聚類、降維等。

​終于有人把Spark大資料分析與挖掘講明白了

對預處理後的資料進行分析,進而獲得包含着資料内容的結果。ML 作為 Spark 的核心處理引擎,在誕生之初就為處理大資料而采用了“分治式”的資料處理模式,将資料分散到各個節點中進行相應的處理。通過資料處理的“依賴” 關系,使處理過程層層遞進。這個過程可以依據要求具體編寫,好處是避免了大資料處理架構所要求進行的大規模資料傳輸,進而節省了時間、提高了處理效率。

ML 借助函數式程式設計思想,讓程式設計人員在編寫程式的過程中隻需要關注其資料,而不必考慮函數調用順序,不用謹慎地設定外部狀态。所有要做的就是傳遞代表了邊際情況的參數。

ML 采用 Scala 語言編寫。Scala 語言是運作在JVM 上的一種函數式程式設計語言,特點是可移植性強,最重要的特點是“一次編寫,到處運作”。借助于 RDD 或 DataFrame 資料統一輸入格式,讓使用者可以在不同的 DDE 上編寫資料處理程式,通過本地化測試後可以在略微修改運作參數後直接在叢集上運作。對結果的擷取更為可視化和直覺,不會因為運作系統底層的不同而造成結果的差異與改變。

ML是Spark 的核心内容,也是其中最閃耀的部分。對資料的分析和處理是 Spark 的精髓,也是挖掘大資料這座寶山的金鋤頭。Spark 3.0 中的資料集使用 DataFrame 格式,并且支援使用管道 API 進行運算。它對機器學習算法的 API 進行了标準化,以便更輕松地将多種算法組合到單個管道或工作流中。有了Pipeline之後,ML更适合建立包含從資料清洗到特征工程再到模型訓練等一系列工作。

本文摘編自《Spark 3.0大資料分析與挖掘:基于機器學習》,經出版方授權釋出。(ISBN:9787302598992)