Spark在大數(shù)據(jù)分析中的處理原理與標準分析模型

| 2022-09-22 admin

Spark在大數(shù)據(jù)分析中的應用與數(shù)據(jù)管道

Spark

大數(shù)據(jù)正在從根本上改變組織和企業(yè)的運營和競爭方式。大數(shù)據(jù)和物聯(lián)網(wǎng)也共享緊密相連的未來,提供數(shù)據(jù)驅動的分析和洞察力。

Dataframe:

Spark中的DataFrame表示組織在命名列[33]中的分布式數(shù)據(jù)集合。DataFrame在概念上相當于關系數(shù)據(jù)庫中的一個表、R或Python的Panda DataFrame中的數(shù)據(jù)幀,但對Spark引擎進行了額外的優(yōu)化。DataFrames支持并可以從廣泛的來源構建,包括結構化數(shù)據(jù)文件,Hive表,JSON、Parquet、外部數(shù)據(jù)庫、HDFS、S3等。此外,通過spark-SQL的外部數(shù)據(jù)源API, DataFrames可以擴展到支持任何第三方數(shù)據(jù)格式或源,包括Avro, CSV, ElasticSearch, Cassandra等。與rdd一樣,dataframe的計算是惰性的,而操作是自動并行化的,并分布在集群上。Spark SQL Catalyst優(yōu)化器利用樹形轉換框架編織了最先進的優(yōu)化和代碼生成。dataframe可以很容易地與其余的Hadoop生態(tài)系統(tǒng)工具和框架通過Spark Core,并提供了一個API,Python, Java, Scala和R編程

創(chuàng)建DF

為了啟動任何Spark計算,需要使用sparkR.session()命令初始化基本的Spark會話。

DataFrames為結構化數(shù)據(jù)操作提供了一種領域特定的語言

Scala、Java、Python和R. DataFrames是Scala和Java中的行數(shù)據(jù)集api。這些操作也被稱為“非類型轉換”,這與通常與強類型Scala或Java相關的“類型轉換”形成了對比數(shù)據(jù)集。

類型轉換:返回值是dataset

非類型轉換:使用API,返回的值是dataframe(dataset的行元素)

SparkSession上的SQL函數(shù)的優(yōu)點是,它允許應用程序以編程方式運行SQL查詢,并以DataFrame返回結果。

Spark SQL中的臨時視圖是會話作用域的,如果創(chuàng)建臨時視圖的會話終止,臨時視圖將消失。如果需要一個臨時視圖來持久化并在所有會話之間共享,直到Spark應用程序終止,那么應該創(chuàng)建一個全局臨時視圖。全局臨時視圖綁定到系統(tǒng)保存的數(shù)據(jù)庫global_temp,必須使用限定名來引用它,例如:SELECT * FROM global_temp.employee.

Spark MLlib

Spark MLlib是一個包含各種機器學習(ML)功能的庫,針對Spark計算框架進行了優(yōu)化。MLlib提供大量的機器學習算法和實用工具,包括分類、回歸、聚類、關聯(lián)規(guī)則、順序模式挖掘、集成模型、分解、主題建模和協(xié)同過濾。此外,MLlib還支持各種功能,如特征提取、模型評估和驗證。所有這些方法都經(jīng)過設計和優(yōu)化,以跨Spark集群擴展。Spark的機器學習工具可以構建各種管道,包括數(shù)據(jù)攝入和特征轉換、數(shù)據(jù)標準化、規(guī)范化、匯總統(tǒng)計、降維等任務,以及模型構建、超參數(shù)調優(yōu)和評估。最后,Spark通過保存和加載模型和管道實現(xiàn)了機器學習持久性

MLlib的能力使大量主要機器學習算法的利用,包括回歸(線性,廣義線性,邏輯),分類算法(包括決策樹,隨機森林,梯度增強樹,多層感知器,支持向量機,樸素貝葉斯等),聚類

(K-means, K-medoids,平分K-means,)潛Dirichlet分配,高斯混合模型,協(xié)同過濾。此外,它還支持特征提取、變換、降維、選擇,以及設計、構造、評價等功能。

MLlib的設計有許多優(yōu)點,包括簡單性、可伸縮性和兼容性。Spark的api設計簡單,提供的實用程序看起來和典型的數(shù)據(jù)科學工具(如R和Python)很像。通過有效的參數(shù)調整,機器學習方法可以很容易地執(zhí)行。此外,MLlib提供了無縫的可伸縮性,允許在大型計算集群上執(zhí)行ML方法,對代碼進行最小或不進行調整。Spark兼容R、Python pandas、scikit-learn和許多其他流行的ML工具。Spark的DataFrames和MLlib提供與現(xiàn)有工作流程集成的通用數(shù)據(jù)科學工具。

大多數(shù)機器學習實驗的目標是創(chuàng)建一個精確的模型,以預測未來的未知數(shù)據(jù)。為了實現(xiàn)這一目標,使用訓練數(shù)據(jù)集對模型進行“訓練”,并使用測試數(shù)據(jù)集對訓練數(shù)據(jù)集上獲得的模型進行評估和驗證。

利用PySpark MLlib特性,傳統(tǒng)的機器學習方法現(xiàn)在可以擴展到大型和復雜的數(shù)據(jù)集。例如,我們可以使用傳統(tǒng)的Iris數(shù)據(jù)集來演示MLlib在Spark上開發(fā)預測模型的能力。

批處理和流處理

在研究Spark Streaming如何工作的細節(jié)之前,應該定義批處理和流處理之間的區(qū)別。通常,批處理一次性將大量數(shù)據(jù)元素收集到一個組中。然后在指定的時間以批處理的方式同時處理整個組。批量計算的時間可以用多種方法來量化。計算時間可以根據(jù)預先指定的預定時間間隔或特定的觸發(fā)條件(包括收集的數(shù)據(jù)的若干元素或數(shù)量)來確定。在不需要實時分析的情況下,批數(shù)據(jù)處理是處理一段時間內收集的大量數(shù)據(jù)的一種非常有效的方法。在歷史上,這一直是最常見的數(shù)據(jù)處理方法。

傳統(tǒng)數(shù)據(jù)庫和數(shù)據(jù)倉庫(包括Hadoop)是批處理系統(tǒng)處理的常見例子。流處理通常使用連續(xù)數(shù)據(jù),是實現(xiàn)快速數(shù)據(jù)處理的關鍵組件。流可以在幾乎瞬間對從一個設備到另一個設備的數(shù)據(jù)流進行數(shù)據(jù)分析。這種連續(xù)計算方法發(fā)生在數(shù)據(jù)流經(jīng)系統(tǒng)時,輸出不需要時間限制。由于接近即時的數(shù)據(jù)流,系統(tǒng)不需要存儲大量的數(shù)據(jù)。

流方法在到達時處理每一個新的單獨的數(shù)據(jù)塊。與批處理相反,不需要等待下一個批處理間隔。術語微批處理經(jīng)常與流聯(lián)系在一起,當批處理較小或以較小的間隔處理時。盡管處理可能以高頻率發(fā)生,但在微批處理范例中,數(shù)據(jù)仍然是一次處理一批。Spark Streaming是一個支持微批處理的系統(tǒng)的例子。如果事件非常頻繁,特別是在快速的時間間隔內,并且需要快速檢測和響應,那么流處理是非常有益的。

Spark Streaming

Spark Streaming是一個Spark組件,支持實時數(shù)據(jù)流處理,支持可擴展、高吞吐量、容錯的數(shù)據(jù)流處理。Spark Streaming是一個Spark組件,通過提供一個類似于Spark的API來操作數(shù)據(jù)流,從而支持實時數(shù)據(jù)流的處理核心的抽樣API。它支持可擴展、高吞吐量、容錯的數(shù)據(jù)流處理。Spark Streaming的API支持與Spark Core相同的高度容錯性、吞吐量和可伸縮性。Spark Streaming接收輸入數(shù)據(jù)流,并將它們分成稱為DStreams的批。DStreams可以從很多來源創(chuàng)建,比如Kafka, Flume和Kinesis,或者通過在其他DStreams上應用操作來創(chuàng)建。

Spark 功能

Spark Streaming接收輸入的數(shù)據(jù)流,并對數(shù)據(jù)進行批量處理。然后,Spark引擎對這些批進行處理,以生成最終的批結果流。離散流或DStream是Spark Streaming支持的核心概念。

它表示連續(xù)的數(shù)據(jù)流。DStream由一系列連續(xù)的rdd表示。應用于DStreams的操作轉換為底層rdd上的操作。Spark Streaming將數(shù)據(jù)離散成小的微批。Spark Streaming receiver并行地接受數(shù)據(jù),并緩沖到工作節(jié)點的內存中,Spark引擎處理這些批,同時優(yōu)化延遲,并將結果輸出到外部系統(tǒng)

Spark Streaming基于流中的數(shù)據(jù)維護狀態(tài),通常稱為有狀態(tài)計算。此外,Spark Streaming允許窗口操作,其中可以使用指定的時間框架對數(shù)據(jù)執(zhí)行操作。利用窗口長度和滑動間隔參數(shù),利用窗口中的滑動時間間隔來更新窗口。當窗口滑動到源DStream上時,底層rdd被組合并操作以生成窗口DStream的rdd。根據(jù)數(shù)據(jù)所在位置和可用資源動態(tài)分配Spark任務,實現(xiàn)負載均衡和故障恢復。Spark Streaming的數(shù)據(jù)流可以來源于源數(shù)據(jù)流,也可以來源于通過轉換輸入流產(chǎn)生的處理數(shù)據(jù)流。在內部, DStream由一系列連續(xù)的rdd表示。每個輸入DStream都與Receiver相關聯(lián),Receiver從源接收數(shù)據(jù)并將其存儲在執(zhí)行器內存中。

類似于Spark rdd, Spark轉換支持DStream修改。輸入DStreams支持許多適用于rdd的轉換,包括map、filter、count、countbyvalue、reduce、union等。Spark Streaming支持兩類內置流源:基本和高級源。基本源通常在StreamingContext API中直接可用,比如文件系統(tǒng)和套接字連接。高級資源通常包括Kafka, Flume,Kinesis等,并可通過額外的實用工具類。這需要通過鏈接工具鏈接額外的依賴項。如果應用程序需要多個數(shù)據(jù)流并行,可以創(chuàng)建多個DStreams??梢詣?chuàng)建多個接收器,同時接收多個數(shù)據(jù)流,通常需要分配多個核來處理所有接收器的數(shù)據(jù)

DStream向外部系統(tǒng)(包括HDFS、數(shù)據(jù)庫或其他文件系統(tǒng))的數(shù)據(jù)輸出使用的是輸出操作。輸出操作觸發(fā)由print、saveAsTextFiles、saveAsObjectFiles、saveAsHadoopFiles等操作之一定義的DStream轉換的實際執(zhí)行。DStreams類似于rdd,通過輸出操作惰性地執(zhí)行。

下面的示例演示了Spark Streaming的一個基本應用:計算從TCP套接字偵聽的數(shù)據(jù)服務器接收到的文本數(shù)據(jù)的字數(shù)

然后輸入你想被計算的文本,屏幕上的輸出將顯示所統(tǒng)計的字數(shù)

這個示例演示了將數(shù)據(jù)輸入到離散流框架。DStreams允許用戶捕獲數(shù)據(jù)并執(zhí)行許多不同類型的計算,如本例中通過對傳入數(shù)據(jù)集進行簡單的單詞計數(shù)所示。DStreaming和rdd是一組關鍵的構建塊,可以使用它們(Spark和Spark Streaming)構建復雜的流應用程序。

Data Pipeline

對于大數(shù)據(jù),可以考慮幾個不同的成熟度級別分析。有很多組織(DAMM, Gartner, IIA, HIMMS,TDWI、IBM等),它們已經(jīng)定義了自己的分析成熟度級別版本。然而,他們都統(tǒng)一有三個總體層次。所有的組織都是從原始數(shù)據(jù)開始,然后首先轉移到清潔、標準化和有組織的數(shù)據(jù)。他們接下來發(fā)展到基本和高級報告。最后,他們可能最終會發(fā)展到建立預測模型。這個過程強調了分析從描述性到診斷性,再到預測性,最后到說明性建模的復雜程度。描述性分析有助于理解過去發(fā)生了什么,而診斷分析則著眼于某些事情可能發(fā)生的原因。預測分析技術建立機器學習模型來預測將要發(fā)生的事情。然后,這些模型可以被輸入到說明性模型中,說明性模型通過建議在特定條件下應該做什么,直接將這個過程帶入決策和行動中。

開發(fā)預測性和規(guī)定性模型

約翰·奈斯比特(John Naisbitt)有句名言:“我們淹沒在數(shù)據(jù)中,卻渴望知識!”這是一句偉大的名言,如果你想到它是在1982年說的,那就更令人驚訝了。他的觀察在今天更加正確。雖然數(shù)據(jù)的規(guī)模已經(jīng)發(fā)生了變化,但在大數(shù)據(jù)世界的混亂中尋找意義的技能、工具和技術的需求并沒有改變。收集、存儲和保護大數(shù)據(jù)的成本很高,而真正的投資回報率(ROI)取決于從大數(shù)據(jù)中提取可操作性的數(shù)據(jù)的能力。數(shù)據(jù)科學領域是研究數(shù)據(jù)洪水的一個角度。數(shù)據(jù)科學家努力提取數(shù)據(jù)的意義,并講述數(shù)據(jù)的故事,以提供洞察力和指導。數(shù)據(jù)科學家已經(jīng)建立了能夠在大量數(shù)據(jù)中發(fā)現(xiàn)關系和模式的技術,然后可以利用這些技術來預測未來的行為和事件。例如,利用機器學習方法的預測建模技術的發(fā)展是由解決數(shù)據(jù)爆炸的必要性驅動的。這種技術從經(jīng)驗中學習,并預測未來的結果,以推動更好的業(yè)務決策。它從原始數(shù)據(jù)中提取規(guī)則、規(guī)則、模式和約束,目標是從數(shù)據(jù)中發(fā)現(xiàn)隱式的、先前未知的和意外的有價值的信息。

數(shù)據(jù)挖掘的跨行業(yè)標準流程(CRISP-DM)

確定此數(shù)據(jù)挖掘過程的六個主要階段。

  1. 項目理解階段: 在進行預測模型開發(fā)時,深入理解應用領域的特征是至關重要的。一旦業(yè)務問題和整個項目目標得到充分理解,項目就進入數(shù)據(jù)理解階段。創(chuàng)建適當?shù)臄?shù)據(jù)集是本階段的目標。
  2. 數(shù)據(jù)理解階段: 對項目的需求進行了解后開始收集海量數(shù)據(jù),對于這些數(shù)據(jù)而言,它可能涉及將來自不同來源和不同類型的數(shù)據(jù)放在一起,以便能夠開發(fā)全面的模型。數(shù)據(jù)的速率、數(shù)量和質量都要仔細考慮。此階段的執(zhí)行可能需要基于數(shù)據(jù)可用性、資源限制等因素重新考慮業(yè)務理解。即該階段不僅會推向下一階段的輸入,也會因情況回滾至第一階段重新考慮或使用該結果再修訂上一階段的內容。
  3. 數(shù)據(jù)準備階段:數(shù)據(jù)準備階段通常是流程中最耗費時間和資源密集的階段。在這一階段進行的數(shù)據(jù)預處理和清理可能需要相當大的努力,不應低估。仔細的、高級的數(shù)據(jù)收集和存儲計劃可以幫助最小化在此階段所花費的精力。
  4. 建模階段:一旦數(shù)據(jù)準備充分,就可以啟動建模階段。然而,典型的情況是,數(shù)據(jù)準備工作將繼續(xù)進行,并根據(jù)建模過程中所取得的進展和獲得的見解進行修改。建模階段包括對數(shù)據(jù)集應用一種或多種數(shù)據(jù)科學技術,以提取可操作的洞察力。即該階段不僅會推向下一階段的輸入,也會因情況回滾至第一階段重新考慮或使用該結果再修訂上一階段的內容。建模階段和數(shù)據(jù)準備階段是可以并行的,但是要求達到建模所需的一定數(shù)據(jù)量,然后可以互相反饋從而提升建模精確度。
  5. 評價階段: 一旦模型在建模階段被開發(fā)或訓練,評估階段就會在原始業(yè)務理解的上下文中考慮模型的價值。通常,需要對過程進行多次迭代才能得到一個滿意的數(shù)據(jù)挖掘解決方案。
  6. 部署階段:最后,部署階段處理組織內模型的實現(xiàn)并完成流程。除了數(shù)據(jù)科學團隊之外,這可能還涉及到來自各種團體的多個人員和專業(yè)知識。