- PySpark大數據分析與應用
- 戴剛 張良均主編
- 8691字
- 2025-01-07 16:58:55
1.1 大數據分析概述
在大數據時代,一切都被記錄和數字化。人類社會的信息量急劇增長,個人可獲取的信息量也呈指數增長。大數據是數據化趨勢下的必然產物。然而,大數據的真正魅力并不在于數據的大小和豐富程度,而在于通過分析和挖掘大數據中的價值,幫助政府、企業和個人做出更明智的決策。
1.1.1 大數據的概念
大數據又被稱為海量數據,目前學界對大數據的定義尚未統一。2008年9月,國際頂級期刊Nature推出了名為“Big Data”的專刊,首次正式提出了“大數據”這一專有名詞,為大數據概念奠定了基礎。2011年2月,同為國際期刊的Science也發表名為“Dealing with Data”的專刊,首次綜合分析了大數據對人類生活造成的影響,并詳細描述了人類面臨的數據困境。2011年5月,麥肯錫全球研究院(McKinsey Global Institute)發布了報告“Big data: The next frontier for innovation, competition, and productivity”,首次給出了相對清晰的定義,即以數據規模是否能夠被經典數據庫及時處理來定義大數據,認為大數據是指數據規模大小超過經典數據庫系統收集、存儲、管理和分析能力的數據集。美國國家標準與技術研究院(National Institute of Standards and Technology,NIST)和國際商業機器公司(International Business Machines Corporation,IBM)也各自對大數據進行了定義。NIST將大數據定義為“具有規模巨大、種類繁多、增長速度快和變化頻繁的特征,需要可擴展體系結構來有效存儲、處理和分析的廣泛數據集”。IBM 則強調了大數據的“4V”特性,即Volume(數量)、Variety(多樣)、Velocity(速度)和Value(價值),后來又加入了Veracity (真實性),形成了大數據的“5V”特性。
盡管學界至今對大數據的概念未達成一致定義,但大數據的“4V”特性得到了普遍認可,具體來說,大數據的“4V”特性如下所述。
(1)Volume,特指大數據的數據體量巨大。計算機中最小的數據存儲基本單位是bit,按照從小到大的順序給出所有單位,即 bit、byte、KB、MB、GB、TB、PB、EB、ZB、YB、BB、DB。1byte=8bit,從Byte開始,前后兩個存儲單位的換算關系按照進率1024(210)進行計算。當前典型的計算機硬盤容量為 TB 量級,而 PB 被認為是大數據的臨界點。根據國際數據公司(International Data Corporation,IDC)發布的白皮書“Data Age 2025”預測,2025年全球數據量總和將達到175ZB。
(2)Variety,特指大數據的數據類型多樣性。傳統IT產業產生和處理的數據類型較為單一,主要是結構化數據。而現在的數據類型不再局限于結構化數據,更多的是半結構化或非結構化數據,如可擴展標記語言、郵件、博客、即時消息、圖片、音頻、視頻、點擊流、日志文件、地理位置信息等。多種數據類型的存在對數據的整合、存儲、分析和處理能力提出了更高的要求。
(3)Velocity,特指大數據的數據產生、處理和分析的速度快。隨著現代傳感技術、網絡技術和計算機技術的發展,數據的產生、存儲、分析和處理的速度遠遠超出了人們的想象,業界對大數據的處理能力有一個稱謂——“1秒定律”,這是大數據與傳統數據或小數據的重要區別。
(4)Value,特指大數據的數據價值密度低但商業價值高。由于大數據的規模不斷擴大,單位數據的價值密度在不斷降低,但整體數據的價值卻在提高。以監控視頻為例,在連續不間斷的監控過程中,可能只有一兩秒的數據是有用的。現在許多學者和專家將大數據等同于黃金和石油,以表示其中蘊含的巨大商業價值。
綜上所述,本書認為大數據是以容量大、種類多、產生與處理速度快以及價值密度低為主要特征的數據集合。由于大數據本身規模大、來源廣且格式復雜,因此需要新的體系架構、技術、算法和分析方法來采集、存儲和關聯分析大數據,以期能夠從中提取隱藏的有價值信息。需要注意的是,大數據是一個動態的定義,不同行業根據不同的應用有著不同的理解,其衡量標準也會隨著技術的進步而改變。
1.1.2 大數據分析的概念
大數據分析是指對規模巨大、海量的數據進行分析。大數據分析的本質是依托大數據進行數據分析,進而挖掘數據蘊含的價值和知識。大數據分析基于傳統的數據分析,又與傳統的數據分析有所不同。
傳統的數據分析(簡稱數據分析)是指用適當的統計分析方法對收集的大量數據進行分析,將數據加以匯總、理解并消化,以求最大化地開發數據的價值、發揮數據的作用。
數據分析的目的是將隱藏在一大批看似雜亂無章的數據背后的信息集中和提煉出來,總結出研究對象的內在規律。在實際工作中,數據分析能幫助管理者進行判斷和決策,以便采取適當策略與行動。
數據分析支持有科學依據的數據驅動決策,決策應基于事實數據,而不單基于過去的經驗或直覺。根據產生的結果,數據分析可以分為描述性分析、診斷性分析、預測性分析和預案性分析4個層次。
描述性分析(發生了什么)通過運用制表和分類、圖形以及計算概括性數據來描述數據特征的各項活動,主要包括數據的頻率分析、集中趨勢分析、離散程度分析、分布以及基本的統計圖形。描述性分析主要應用于對已發生事件進行描述,即發生了什么。在日常的工作中,職業人員養成每天上班第一時間查看數據的習慣,如查看實時數據,日、周、月報等,從而培養對數據的敏感性。
診斷性分析(為什么會發生)用于獲得事件發生的原因,尋找影響這些事件發生的因素。診斷性分析一般建立在描述性分析之上,經過描述性分析對情況有了基本了解之后,需要對原因進行分析,尋找產生現象的原因和影響因素,從而做出相應的調整與優化。
預測性分析(可能發生什么)涵蓋各種統計技術,如數據挖掘、機器學習等,分析當前和歷史事實以對未來或未知事件做出預測。預測性分析用于對未來將要發生的事件進行預測,即預測未知事件的走向。
預案性分析(需要做什么)在基于預測性分析的結果上,規定、規范應該采取的行動,因此預案性分析也稱為規范性分析。預案性分析的重點不僅是遵循哪個最優選項,也包括為什么選擇這個選項。預案性分析提供可以推理的結果,可以獲得優勢或降低風險。
從描述性分析、診斷性分析、預測性分析到預案性分析,前面的分析是后面分析的基礎,后面的分析是對前面分析的進一步深化。在日常生活、工作中遇見問題時,我們可以先從數據入手,找出問題,準確地定位問題,多角度尋找問題產生的原因,以數據為驅動,并為下一步的改正找到機會點。分析結果的價值越來越高,復雜度也越來越高。從時間維度上看,描述性分析、診斷性分析立足于過去,預測性分析、預案性分析更關注未來。
以統計學為直接理論工具的數據分析主要關注描述性分析和診斷性分析,在有限的數據集上使用傳統的、簡單的方法進行分析,獲得發生的事件以及事件發生的原因。
在大數據時代,大數據具有容量大、種類多、產生與處理速度快、價值密度低等特點,這些特點增加了對大數據進行有效分析的難度,大數據分析成為當前探索大數據發展的核心內容。大數據分析主要側重于預測性分析和預案性分析,在大規模的數據集和來源多樣的復雜原始數據上進行分析,所使用的方法和模型更加復雜,期望能夠從數據中挖掘、發現新的知識和新的規律。
新一代分布式框架、云計算等計算模式的出現提升了對數據的獲取、存儲、計算與管理能力,相比于傳統的數據分析,大數據分析在思維方式上有以下4個顛覆性觀點轉變。
(1)全樣而非抽樣。對所有相關數據進行分析,不再基于抽樣樣本進行隨機分析,通過觀察所有數據尋找異常值進行分析。
(2)混雜而非純凈。數據量的大幅增加會使一些錯誤的數據混進數據集,但是因為數據量龐大,所以不必擔心某個數據點會對整套分析造成不利影響。接收混雜的數據并從中受益,而不是以高昂的代價消除所有的不確定性,這是從“小數據”到“大數據”的轉變。
(3)趨勢而非精確。過去需要分析的數據很少,因而要求分析結果極其精確。現在數據如此之多,可以適當忽略微觀層面上的精確度,這樣會在宏觀層面上擁有更好的洞察力。
(4)相關而非因果。不需要過于關注事物之間的因果關系,而是應該尋找事物之間的相關關系。雖然相關關系可能無法準確地解釋某個事件為何會發生,但是它可以告訴我們某個事件已經發生了,而無需探究現象背后的原因。
1.1.3 大數據分析的流程
大數據分析源于業務需求,其完整的流程包括明確目的、數據采集與存儲、數據預處理、分析與建模、模型評估以及可視化應用。
1.明確目的
每個大數據分析項目都有獨特的業務背景和需要解決的問題。在項目開始之前,應考慮數據對象、商業目的、業務需求等問題。只有深入理解業務背景,明確數據分析目的,并確定分析思路,才能確保數據分析過程的有效性。一旦明確了目的,可以做指標的分解,為數據的采集、分析和處理提供清晰的指引方向。
2.數據采集與存儲
根據指標的分解結果,可以確定數據選取范圍,并采集目標數據。采集的數據可以來自企業內部數據庫中的歷史數據、Excel 表格數據、文本文件以及實時數據等。此外,互聯網和行業領域相關數據也是重要的數據來源。數據類型可以分為結構化、半結構化和非結構化3類。與以往傳統數據相比,大數據更多的是半結構化和非結構化的。傳統的輕型關系數據庫只能完成一些簡單的查詢和處理請求。當數據存儲和處理任務超出輕型關系數據庫能力范圍時,需要對其進行改進。這時,可以利用大型分布式數據庫、集群或云存儲平臺來完成數據的存儲和處理。
3.數據預處理
數據預處理是大數據處理中不可或缺的環節。由于數據源的多樣性以及數據傳輸中的一些因素,大數據的質量往往具有不確定性。噪聲、冗余、缺失和數據不一致等問題嚴重影響了大數據的質量。為了獲得可靠的數據分析和挖掘結果,必須利用數據預處理手段來提高大數據的質量。數據預處理包括數據合并、數據清洗、數據標準化、數據變換等,例如,可以將來自不同部門的數據表合并,補充部分數據缺失的屬性值,統一數據格式、編碼和度量,進行歸一化處理,檢測和刪除異常數據,進行冗余檢測和數據壓縮等。數據預處理是一項相對煩瑣的工作,并且可能需要花費較長的時間,數據預處理的工作量通常占據了整個大數據分析流程工作量的60%~80%。
4.分析與建模
分析與建模是大數據處理的核心環節,涵蓋了統計分析、機器學習、數據挖掘和模式識別等多個領域的技術和方法。在分析階段,可以采用對比分析、分組分析、交叉分析和回歸分析等方法。綜合考慮業務需求、數據情況、花費成本等因素,可以選擇適合的方法進行建模,如分類、聚類、時間序列等。在實踐中,對一個目標進行分析通常會使用多個模型。通過后續的模型評估過程,可以對模型進行優化和調整,以找到最適合的模型。
5.模型評估
模型評估對模型進行全面評估的過程,包括建模過程評估和模型結果評估。具體來說,建模過程評估主要關注模型的精度、準確性、效率和通用性等方面;而模型結果評估則需要考慮是否有遺漏的業務問題,以及模型結果是否解決了業務問題。這需要與業務專家合作進行評估。
6.可視化應用
將分析結果以可視化的形式呈現。數據可視化的目標是以圖形方式清晰、有效地展示信息。通過不同角度的可視化圖形,人們可以更好地解讀數據的本質,更直觀地解釋數據之間的特征和屬性情況,并更深入地理解數據和數據所代表事件之間的關聯。最終,編寫分析報告,并將分析結果應用于實際業務中,實現數據分析的真正價值——解決問題、創造商業價值并提供決策依據。
1.1.4 大數據分析的應用場景
大數據無處不在,應用于各行各業。大數據分析的應用場景是其在各行各業業務活動中的具體體現。以下是兩個典型的應用場景。
1.個性化推薦
大數據分析一方面能夠幫助用戶發現有價值的信息,另一方面能夠將信息推薦給可能感興趣的用戶,實現信息消費者和信息生產者的雙贏。信息生產者通過分析用戶的興趣愛好,進行個性化推薦。每個用戶所得到的推薦信息都是與自己的行為特征和興趣有關的,而不是籠統的大眾化信息。信息生產者利用大數據分析用戶的興趣點,可以幫助用戶從海量信息中發現自己潛在的需求。例如,電子商務網站記錄所有用戶在站點上的行為,網站運營商可以根據不同數據特點對用戶行為進行分析、處理,并分成不同區為用戶推送推薦。社交網站的音樂、電影和圖書推薦,以及媒體根據用戶的品位和閱讀習慣進行個性化推薦也是基于用戶行為分析。
2.預測性分析
預測性分析是大數據分析的核心應用之一。它基于大數據和預測模型預測未來某事件發生的概率,讓分析從“面向已經發生的過去”轉向“面向即將發生的未來”。預測性分析的優勢在于它可以將一個非常困難的預測問題轉化為一個相對簡單的描述問題,這是傳統小數據集無法企及的。例如,設備管理領域可以通過物聯網技術收集和分析設備上的數據流,包括連續用電、零部件溫度、環境濕度和污染物顆粒等潛在特征,建立設備管理模型,預測設備故障,合理安排預防性維護,以確保設備正常作業,降低因設備故障帶來的安全風險。此外,交通物流分析領域也可以通過業務系統和全球定位系統(Global Positioning System,GPS)獲得數據,對客戶使用數據構建交通狀況預測分析模型,有效預測實時路況、物流狀況、車流量、客流量和貨物吞吐量等,進而提前補貨,制定庫存管理策略。公安機關、各大金融機構、電信部門等也可以利用用戶基本信息、用戶交易信息、用戶通話短信信息等數據,識別可能發生的潛在欺詐交易,做到未雨綢繆。
1.1.5 大數據技術體系
大數據分析是基于大數據進行的數據分析,與傳統數據分析的主要區別是數據來源廣泛、規模龐大、形式多樣化,對數據的計算處理速度要求高,尤其是實時處理方面。大數據分析圍繞數據、平臺和算法3個主要要素展開,其中,數據是加工處理的對象,平臺是加工數據的載體和工具,算法是對數據進行加工的具體流程和方法。
由于大數據的規模龐大且類型多樣,因此對平臺的承載和支撐能力提出了更高的要求,相應的分析流程也與傳統數據分析有所差異。
1.大數據采集框架
大數據采集框架負責從外部數據源采集數據,包括大數據收集、交換和消息處理系統等框架。典型的大數據采集開源框架有 Flume,數據交換開源框架有 Sqoop,消息處理系統開源框架有Kafka。通過這些框架能采集數量繁多、結構復雜、實時、流式數據。
① Flume是分布式海量日志采集、聚合和傳輸框架,屬于Apache頂級項目。作為非關系數據采集工具,Flume 可近實時采集流式日志數據,經過濾、聚集后加載到 Hadoop分布式文件系統(Hadoop Distributed File System,HDFS)等存儲系統中。
② Sqoop是一款數據遷移工具框架,用于在關系數據庫和Hadoop之間交換數據。利用Sqoop,可以將數據從MySQL、Oracle等關系數據庫中導入Hadoop中,如HDFS、Hive中,也可以將數據從Hadoop導出到關系數據庫中。
③ Kafka是發布/訂閱的消息系統框架,其設計初衷是為處理實時數據提供統一、高通量、低等待的消息傳遞平臺。作為分布式消息系統,Kafka 可以處理大量的數據,能夠將消息從一個端點傳遞到另一個端點,能夠在離線和實時兩種大數據計算架構中處理數據。
2.大數據存儲框架
大數據存儲框架負責對大數據進行存儲。典型的大數據存儲框架包括HDFS、HBase、Cassandra、ScyllaDB、MongoDB、Accumulo、Redis、Ignite、Arrow、Geode、CouchDB、Kudu、CarbonData等。下面僅對HDFS和HBase做簡要介紹。
HDFS是Hadoop的核心子項目,基于流數據模式訪問和處理超大文件的需求而開發,數據在相同節點上以復制的方式進行存儲,以實現將數據合并計算的目的。與傳統的單機文件系統不同,HDFS 本質上是為了大量的數據能橫跨成百上千臺計算機而設計的,呈現給用戶的是一個文件系統,而不是多文件系統。例如,獲取/hdfs/tmp/file1的文件數據,引用的是一個文件路徑,實際的數據存放在很多不同的計算機上。HDFS 的優點是作為具有高度容錯性的系統,適合部署在廉價的計算機上,能提供高吞吐量的數據訪問,非常適合在大規模數據集上應用。然而,HDFS 也存在一些缺點,如不適合低延遲數據訪問、無法高效存儲大量小文件、不支持多用戶寫入及任意修改文件等。
HBase 是一個分布式、面向列、非關系開源數據庫,屬于 Apache 頂級項目。作為高可靠性、高性能、面向列、可伸縮的分布式存儲系統,HBase可在廉價的計算機服務器上搭建起大規模結構化存儲集群,處理由成千上萬的行和列組成的大型數據。此外,HBase還可以對分布式計算的結果數據進行隨機、實時存儲。
3.大數據計算框架
根據對時間的性能要求,大數據計算可分為批處理、交互式處理和實時處理。
批處理對時間要求最低,一般要求處理時間為分鐘到小時級別,甚至天級別,它追求的是高吞吐率,即單位時間內處理的數據量盡可能大。
交互式處理對時間要求比較高,一般要求處理時間為秒級別,這類框架需要與使用者進行交互,因此會提供類結構查詢語言(Structure Query Language,SQL)以便于用戶使用。
實時處理對時間要求最高,一般要求處理時間延遲在秒級以內。
大數據計算框架主要有MapReduce、Spark、Flink、Storm等,相應介紹如下。
(1)MapReduce
Hadoop 是 Apache 軟件基金會旗下的開源分布式計算平臺,主要包括分布式存儲HDFS、離線計算框架MapReduce、資源調度框架YARN共3部分,為用戶提供系統底層細節透明的分布式基礎架構。
MapReduce是一個分布式的離線計算框架,用于海量數據的并行運算,是Hadoop數據分析的核心。MapReduce框架使得開發人員在不會分布式并行編程的情況下,也可以將編寫的業務邏輯代碼運行在分布式系統上,開發人員可以將絕大部分的工作集中于業務邏輯上的開發,具體的計算只需要交給MapReduce框架即可。
MapReduce 的處理過程分為兩個步驟:Map 和 Reduce。Map 對輸入的數據進行并行處理,處理結果傳給Reduce完成最后的匯總。但MapReduce對HDFS的頻繁操作(計算結果持久化、數據備份、資源下載及重新洗牌等)導致磁盤輸入/輸出(Input/Output,I/O)成為系統性能的瓶頸,因此只適用于離線數據處理或批處理,而不支持對迭代式、交互式、流式數據進行處理。
(2)Spark
Spark 是通用的一棧式計算框架,是專為大規模數據處理而設計的快速、通用的計算框架。Spark是基于MapReduce算法實現的分布式計算,擁有MapReduce所具有的優點,但不同于 MapReduce 的是,程序中間輸出和結果可以保存在內存中,從而不再需要讀寫HDFS。因此Spark能更好地適用于數據挖掘與機器學習等需要迭代的算法中,高效地支持更多計算模式,包括交互式查詢和流處理等。
Spark是MapReduce的替代方案,是對Hadoop的補充,而且兼容HDFS、Hive,可融入Hadoop的生態系統,以彌補MapReduce的不足。Spark旨在成為運行批處理、數據流處理、交互處理、圖形處理和機器學習等應用的整合平臺。目前Spark已經成為大數據領域最熱門的技術之一。關于Spark的具體內容將在1.2節中介紹。
(3)Flink
Flink是一個開源的、適用于流處理和批處理的分布式數據處理框架,其核心是一個流式的數據流執行框架。Flink旨在成為運行批處理、數據流處理、交互處理、圖形處理和機器學習等應用的一棧式平臺。Flink不僅具有支持高吞吐、低延遲和exactly-once(保證每條記錄僅被處理一次)語義的實時計算能力,而且有基于流式計算引擎處理批量數據的計算能力,真正意義上實現了批流統一,同時Flink運行時本身也支持迭代算法的執行。Flink 流式計算模型實現了高吞吐、低延遲、高性能兼具的實時流式計算框架,而且完全兼容Hadoop。
由于眾多優秀的特性,因此 Flink 成為開源大數據處理框架中的一顆新星。在全球范圍內,越來越多的公司開始使用 Flink,Flink 漸漸成為企業內部主流的數據處理框架,也有逐漸成為下一代大數據處理框架標準的趨勢。
(4)Storm
Storm是一個開源的分布式實時大數據處理系統。Storm擅長實時處理海量數據,而非批處理。Storm用于在容錯和水平可擴展方法中處理大量數據。
Storm最初由內森·馬茲創建,后來被推特收購并開源。2011年9月Storm正式發布, 2013年9月進入Apache“孵化”并于2014年9月17日“畢業”成為Apache頂級項目,短時間內Storm成了分布式實時處理系統的標準。Storm是用Java和Clojure編寫的,使用Apache Thrift,能以任何語言編寫拓撲(Topology)。Storm擁有毫秒級別的實時數據處理能力。隨著Spark和Flink的發展,Storm市場占有率在逐漸降低,但目前它仍然是實時分析的領導者。
4.資源調度框架
資源調度框架主要有YARN和Mesos,如何提高資源利用率、降低運營成本是資源管理的任務。下面僅對YARN做簡要介紹。
YARN(Yet Another Resource Negotiator)是Hadoop的資源管理和作業調度系統。作為Apache Hadoop的核心組件之一,YARN負責將系統資源分配給在Hadoop集群中運行的各種應用程序,并調度在不同集群節點上執行的任務。YARN是Hadoop 2.x中的新特性。它的出現其實是為了彌補MapReduce的不足,提高集群環境下的資源利用率,這些資源包括內存、磁盤、網絡、I/O等。
YARN的基本思想是將資源管理和作業調度的功能分解為單獨的守護進程(Daemon)。YARN 擁有一個全局 ResourceManager、每個應用程序的 ApplicationMaster 及每臺計算機框架代理NodeManager。ResourceManager負責所有應用程序之間的資源分配。NodeManager負責容器(Container)的資源管理,監視其資源使用情況(CPU、內存、磁盤、網絡等)并報告給ResourceManager。ApplicationMaster負責協調來自ResourceManager的資源,并與NodeManager一起執行和監視任務。
5.數據查詢與分析框架
數據分析層直接與用戶應用程序對接,為其提供易用的數據處理工具。為了讓用戶更輕松地分析數據,計算框架會提供多樣化的工具,包括應用程序接口(Application Program Interface,API)、類SQL、數據挖掘軟件開發工具包(Software Development Kit,SDK)等。典型的數據查詢與分析框架有Hive、Spark SQL、Mahout等。
Hive是基于Hadoop的數據倉庫工具,是Apache頂級項目。Hive可以將結構化數據文件映射為一張數據庫表,并提供類SQL語句的Hive SQL(即HQL)查詢功能,將SQL語句轉換為MapReduce任務運行。Hive的優點在于學習成本低,可以通過HQL語句快速實現簡單的MapReduce統計,而無需開發專門的MapReduce應用。然而,由于Hive底層默認是轉換為 MapReduce行,而 MapReduce 的洗牌(Shuffle)階段是基于磁盤進行的,因此Hive只適用于離線分析,并且效率比較低。
Mahout 是一個基于 Hadoop 的機器學習和數據挖掘的分布式框架,提供了一些可擴展的機器學習領域經典算法的實現,旨在幫助開發人員更方便、快捷地創建智能應用程序。Mahout 包含了許多實現,包括聚類、分類、推薦(過濾)、頻繁子項挖掘,其中核心的三大算法為推薦、聚類及分類。此外,通過使用 Hadoop庫,Mahout可以有效地擴展到云環境中。
大數據技術體系龐大且復雜,在學習過程中,我們應該培養解決問題的自主能力。遇到問題時,可第一時間利用搜索引擎尋找解決方案,學會獨立解決問題,充分利用互聯網資源。在參考資料的選擇上,應優先查閱官方文檔,以便獲得最權威、最準確的信息。同時,我們需要深入理解各個技術的思想與原理,積極提問、勤于思考。例如:MapReduce是如何分而治之的策略的?HDFS 數據到底存儲在哪里,副本機制是如何工作的?YARN是什么,它的功能有哪些?Spark和Flink各自的優勢和特點是什么?為什么Spark不能完全取代MapReduce?此外,我們還應該通過動手實踐,來加深對大數據先進技術的理解,掌握大數據技術的精髓,走在時代前列,為國、為民服務。