RDD程式設計
RDD基礎
RDD:Resilient Distributed Datasets,彈性分散式資料集
分佈在叢集中的只讀物件集合(由多個分割槽(Partition)構成,這些分割槽執行在叢集中的不同節點上)
可以儲存在磁碟或記憶體中(多種儲存級別)
通過並行“轉換”操作構造
失效後自動重構
RDD可以包含Python、java、Scala中任意型別的物件,甚至可以包含使用者自定義的物件。
兩種方法建立RDD:
1.讀取外部資料集。
2.在驅動程式裡分發驅動器程式中的物件集合(比如list和set)。
-
RDD支援兩種型別操作
- 1.轉化操作(tranformation):由一個RDD生成一個新的RDD.舊的RDD不會被改變。map、filter、groupBy、reduceBy
- 2.行動操作(action):對RDD計算出一個結果,並把結果返回到驅動程式中,或者寫入外部儲存系統中。count、collect、saveAsTextFile
-
注:轉化操作返回的是RDD,行動操作返回的是其它資料型別。
-
惰性求值
轉化操作和行動操作的區別在於Spark計算RDD的方式不同。RDD的轉化操作都是惰性求值,即對RDD呼叫轉化操作(如map())時,操作不會立即執行,它們只有第一次在一個行動操作中用到時才會真正計算。
預設情況下,Spark的RDD會在每次對它們進行行動操作時重新計算,如果想在多個行動操作中重用同一個RDD,可以使用RDD.persist(),讓Spark把這個RDD快取起來。預設快取到記憶體中(以分割槽方式儲存到叢集中各個機器上)
-
持久化(快取)
- 持久化原因如上。持久化資料丟失怎麼辦?讓Spark持久化一個RDD,計算出RDD的節點會分別儲存它們所求出的分割槽資料,如果一個有持久化的節點發生故障,Spark會在用到快取的資料時重算丟失的資料分割槽,當然可以把資料備份到多個節點上,以避免單節點故障拖累進度。
持久化資料方式:預設情況下persist()會把資料以序列化的形式快取在JVM的堆空間中,當我們把資料寫到磁碟或堆外儲存上是也總是使用序列化資料。
持久化級別:
如果採用快取在記憶體中的級別,當記憶體放不下是,Spark會自動利用最近最少使用(LRU)的策略吧最老的分割槽從記憶體中移除。
向Spark傳遞函式
- Spark 的大部分轉化操作和一部分行動操作,都需要依賴使用者傳遞的函式來計算。
- 在Scala 中,我們可以把定義的行內函數、方法的引用或靜態方法傳遞給Spark,就像Scala 的其他函式式API 一樣。我們還要考慮其他一些細節,比如所傳遞的函式及其引用的資料需要是可序列化的(實現了Java 的Serializable 介面)。
- 如果在Scala 中出現了NotSerializableException,通常問題就在於我們傳遞了一個不可序列化的類中的函式或欄位。記住,傳遞區域性可序列化變數或頂級物件中的函式始終是安全的。
常見轉化操作和行動操作
sample(withReplacement, fraction, seed):對RDD取樣,以及是否替換。
一個完整案例
相關文章
- RDD程式設計 上(Spark自學三)程式設計Spark
- RDD程式設計 下(Spark自學四)程式設計Spark
- Spark開發-RDD介面程式設計Spark程式設計
- 好程式設計師分享乾貨 彈性分散式資料集RDD程式設計師分散式
- 關於Spark中RDD的設計的一些分析Spark
- Spark RDD使用詳解--RDD原理Spark
- 好程式設計師大資料學習路線分享彈性分散式資料集RDD程式設計師大資料分散式
- RDD到底是什麼?RDD的APIAPI
- Spark RDD APISparkAPI
- spark-RDDSpark
- Spark RDD的預設分割槽數:(spark 2.1.0)Spark
- 基於RDD的Spark應用程式開發案列講解(詞頻統計)Spark
- RDD的快取快取
- Spark - [03] RDD概述Spark
- Java 網路程式設計(TCP程式設計 和 UDP程式設計)Java程式設計TCPUDP
- 程式設計思想 面向切面程式設計程式設計
- 《程式設計師程式設計藝術》程式設計師
- RDD持久化,不使用RDD持久化的問題的工作原理持久化
- 程式設計小記-程式設計規範程式設計
- 從程式設計到養生程式設計程式設計
- 【go網路程式設計】-HTTP程式設計Go程式設計HTTP
- 程式設計模式-表驅動程式設計程式設計設計模式
- 程式設計能力與程式設計年齡程式設計
- 程式設計師程式設計10大原則程式設計師
- 所有程式設計皆為Web程式設計程式設計Web
- 盲人程式設計師的程式設計生涯程式設計師
- 程式設計將死,程式設計師永存程式設計師
- 程式語言設計,程式設計哲學程式設計
- Spark 的核心概念 RDDSpark
- Spark Basic RDD 操作示例Spark
- Hermit:一位程式設計師設計的程式設計字型MIT程式設計師
- 程式設計師OR非程式設計師,有些程式設計的事需要知道程式設計師
- 程式設計師何苦為難程式設計師?程式設計師
- 【程式設計素質】程式設計思想總結程式設計
- JAVA網路程式設計(2)TCP程式設計Java程式設計TCP
- 程式設計和網路程式設計入門程式設計
- 十、GO程式設計模式 : 泛型程式設計Go程式設計設計模式泛型
- IO程式設計和NIO程式設計簡介程式設計