說明
本博客每週五更新一次。 RDD 是spark計算引擎重要的數據結構,使用RDD開發業務,必須深入學習使用它。
什麼是RDD
- RDD(Resilient Distributed Dataset) 彈性分佈式數據集,spark中最重要數據結構概念,代表一個不可變、可分區、可並行計算的集合,邏輯上是一個數據集,物理上可以分塊分佈在不同的機器上併發運行。
- RDD具有數據流模型的特點:自動容錯、位置感知性調度和可伸縮性,能分佈在集羣的節點上,以函數式操作集合的方式,進行各種並行計算。RDD允許用戶在執行多個查詢時顯式地將工作集緩存在內存中,後續的查詢能夠重用工作集,這極大地提升了查詢速度。
- RDD內置大量函數,可以大大提升開發效率,快速完成功能開發。
RDD生命週期
- spark程序中,首先創建或讀取RDD,然後對數據進行一系列一次或多次變換操作(Transform),並對保存中間結果(Cache),最後對結果進行處理(Action)。
創建RDD
- RDD的創建可以通過對內存中的數據並行化計算結果,或直接讀取分佈式數據庫(S3, HDFS, Cassandra 等等)創建,也可以直接讀取本地文件創建。
RDD變換
- RDD變換操作支持數據變換接口,常見如filter, map等等,執行到變換代碼是,RDD數據並不立即發生實際變化(Lazily transform),而是保存數據的依賴關係,直到最終RDD進行動作(Action)時。RDD系統從全局角度來優化Transform的運行過程,節省計算時間。
RDD緩存
- 緩存(cache)操作將數據的中間結果保存在內存中,以便反覆使用。
RDD結果處理
- RDD結果處理(action)操作將數據的運算結果進行統計和返回。常見如count 和 collect。
RDD特性
RDD默認有如下重要特性。
- 如何分塊(Partition)
- 與父RDD依賴關係(Dependency)
- 從父RDD求子RDD的函數(Function)
- 當前RDD存儲位置(Preferred Localtion)
- 存儲RDD分塊類(Partitioner)
RDD限制
- 沒有任何內置優化引擎
- 不能處理結構化數據
RDD函數
RDD的創建有兩種常用方式:
- sc.parallelize()
- sc.makeRDD()
總結
- RDD是Spark數據集合的一種,還有DataFrame、DataSet等。