日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Spark RDD与DataFrame

發布時間:2024/1/17 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spark RDD与DataFrame 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

1. DataFrame概念

DataFrame的前身是SchemaRDD,從Spark 1.3.0開始SchemaRDD更名為DataFrame。與SchemaRDD的主要區別是:DataFrame不再直接繼承自RDD,而是自己實現了RDD的絕大多數功能。你仍舊可以在DataFrame上調用rdd方法將其轉換為一個RDD。

在Spark中,DataFrame是一種以RDD為基礎的分布式數據集,類似于傳統數據庫的二維表格,DataFrame帶有Schema元信息,即DataFrame所表示的二維表數據集的每一列都帶有名稱和類型,但底層做了更多的優化。DataFrame可以從很多數據源構建,比如:已經存在的RDD、結構化文件、外部數據庫、Hive表。

2. DataFrame與RDD的區別

RDD可看作是分布式的對象的集合,Spark并不知道對象的詳細模式信息,DataFrame可看作是分布式的Row對象的集合,其提供了由列組成的詳細模式信息,使得Spark SQL可以進行某些形式的執行優化。

DataFrame和普通的RDD的邏輯框架區別如下所示:

左側的RDD[Person]雖然以Person為類型參數,但Spark框架本身不了解 Person類的內部結構。

而右側的DataFrame卻提供了詳細的結構信息,使得Spark SQL可以清楚地知道該數據集中包含哪些列,每列的名稱和類型各是什么。DataFrame多了數據的結構信息,即schema。這樣看起來就像一張表了,DataFrame還配套了新的操作數據的方法,DataFrame API(如df.select())和SQL(select id, name from xx_table where …)。

此外DataFrame還引入了off-heap,意味著JVM堆以外的內存, 這些內存直接受操作系統管理(而不是JVM)。Spark能夠以二進制的形式序列化數據(不包括結構)到off-heap中, 當要操作數據時, 就直接操作off-heap內存. 由于Spark理解schema, 所以知道該如何操作。

RDD是分布式的Java對象的集合。DataFrame是分布式的Row對象的集合。DataFrame除了提供了比RDD更豐富的算子以外,更重要的特點是提升執行效率、減少數據讀取以及執行計劃的優化。

有了DataFrame這個高一層的抽象后,我們處理數據更加簡單了,甚至可以用SQL來處理數據了,對開發者來說,易用性有了很大的提升。

不僅如此,通過DataFrame API或SQL處理數據,會自動經過Spark 優化器(Catalyst)的優化,即使你寫的程序或SQL不高效,也可以運行的很快。

3. DataFrame與RDD的優缺點

RDD的優缺點:?
優點:

  • 編譯時類型安全?
    編譯時就能檢查出類型錯誤
  • 面向對象的編程風格?
    直接通過類名點的方式來操作數據

缺點:

  • 序列化和反序列化的性能開銷?
    無論是集群間的通信, 還是IO操作都需要對對象的結構和數據進行序列化和反序列化。
  • GC的性能開銷?
    頻繁的創建和銷毀對象, 勢必會增加GC

DataFrame通過引入schema和off-heap(不在堆里面的內存,指的是除了不在堆的內存,使用操作系統上的內存),解決了RDD的缺點, Spark通過schame就能夠讀懂數據, 因此在通信和IO時就只需要序列化和反序列化數據, 而結構的部分就可以省略了;通過off-heap引入,可以快速的操作數據,避免大量的GC。但是卻丟了RDD的優點,DataFrame不是類型安全的, API也不是面向對象風格的。

總結

以上是生活随笔為你收集整理的Spark RDD与DataFrame的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。