iT邦幫忙

2023 iThome 鐵人賽

DAY 15
0
AI & Data

30天認識主流大數據框架:Hadoop + Spark + Flink系列 第 15

Day15 - Spark 介紹 (3):Spark SQL、DataFrame、DataSet

  • 分享至 

  • xImage
  •  

前言
昨天介紹了 RDD,還沒看過的人可以先點這邊看 RDD 的介紹:Day14 - Spark 介紹 (2):RDD

什麼是 Spark SQL?

Spark SQL 是 Spark 中用來處理結構化資料的模組,Spark SQL 將底層的 RDD 抽象為更高級別的 DataFrame/DataSet API,並支持以 SQL 語法查詢。

為什麼要有 Spark SQL?

  1. 更高層次的抽象
    RDD 雖然是 Spark 的基本數據結構,但它對於處理結構化數據來說太複雜了,而這也大大增加了開發與維護的難度;Spark SQL 在 RDD 之上進行更高層次的抽象 (DataFrame/DataSet),使用者可以直接透過 SQL 語法查詢操作,提高了程式開發效率與可維護性。
  2. 效能優化
    RDD 的原生 API 複雜,直接操作 RDD 容易產生冗餘操作,而經由 Spark SQL 送出的 query 都會經過 Catalyst optimizer 進行查詢優化、挑選執行計畫,所以雖然 Spark SQL 是建構在 RDD 之上,因此使用 Spark SQL 通常會比使用 RDD 來得有效率。
  3. 兼容性
    Spark SQL 可以與多種數據源集成,如 Apache HiveApache HBaseJson、Parquet 等

DataFrame & DataSet

RDD 是以 Row 為為主的一種數據結構,而 DataFrame 與 DataSet 則都是基於 RDD 所衍生出的抽象表格結構:
https://ithelp.ithome.com.tw/upload/images/20230930/20138939Of5RJt2wQK.png
(圖片來源:A Tale of Three Apache Spark APIs: RDDs vs DataFrames and Datasets)

DataFrame 與 DataSet 有著非常相似的概念,都是表格結構,差別只在於型別 (type) 是否固定,而型別是否固定則是受到程式語言本身的性質影響(靜態型別 Static Typing vs 動態型別 Dynamic Typing):

  • DataFrame型別不固定的分散式關聯式資料表,可於 PythonR 中使用
  • DataSet:基本上就是 型別固定 (type safe) 的 DataFrame,可於 JavaScala 中使用,

Hive vs. Spark SQL

前幾天有介紹過 Hive,還沒看過的可以看這篇:Day10 - Hive 介紹,簡單來說,Hive 本質上是一個建構在 HDFS 之上的數據倉儲 (Data WareHouse),Hive 與 Spark SQL 一樣支援 SQL 語法,也一樣可以被用來處理大規模的結構化數據,我們不妨來比較一下 Hive 與 Spark SQL 兩者有何不同:

  1. Hive 是數據倉儲,表示 Hive 同時具有「存儲」與「查詢」兩種功能,而 Spark SQL 一般來說只能被用來查詢。
  2. Hive 使用 MapReduce 處理查詢,Spark SQL 則是基於 RDD 處理查詢,也因此兩者的處理效率有落差,一般來說 RDD 的處理效率是要優於 MapReduce 的。

Spark with Hive vs. Hive on Spark

事實上,Hive 與 Spark SQL 是可以集成的!有兩種模式,分別是 Spark with HiveHive on Spark,聽起來是不是很混亂啊😵‍💫😵‍💫😵‍💫

這邊簡單介紹一下:

  • Spark with Hive
    本體是 Spark,由 Spark 負責查詢、解析優化、執行,Hive 只提供存儲功能,更準確的說是白嫖了 Hive 的 metaStore,比較容易實現,也是大部分人的選擇。
  • Hive on Spark
    本體是 Hive,查詢、解析優化、存儲都維由 Hive 負責,但把 MapReduce 替換成 RDD,實現起來比較麻煩,需要更改 Hive 的配置。

預告

終於介紹完了,明天正式進入 Spark 安裝環節~

參考資料

Spark SQL, DataFrames and Datasets Guide
RDD vs. DataFrame vs. DataSet - Spark 基本介紹- GitBook
总结:Hive,Hive on Spark和SparkSQL区别 - 简书
Spark on Hive 和Hive on Spark的区别与实现- 大数据老司机


上一篇
Day14 - Spark 介紹 (2):RDD
下一篇
Day16 - Spark 安裝與配置
系列文
30天認識主流大數據框架:Hadoop + Spark + Flink30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言