教程:Apache Spark SQL入門及實踐指南!

趙鈺瑩發表於2018-09-12

Apache SparkSQL是一個重要的Spark模組,我們可以使用Python、Java和Scala中的DataFrame和DataSet簡化結構化資料處理流程,該過程從企業收集資料並形成分散式資料集合。使用Spark SQL,我們可以從Spark程式內部通過標準資料庫聯結器(JDBC/ODBC)連線到Spark SQL外部工具查詢資料。

本教程介紹了Spark SQL體系結構元件,比如DataSets和DataFrames;在Apache Spark中使用Spark SQL以及其優劣等內容。

Apache Spark SQL教程

Spark SQL簡介

Apache SparkSQL是Spark中結構化資料處理模組。使用Spark SQL提供的介面,我們可以獲得有關資料結構和執行計算等資訊。有了這些資訊,我們就可以在Apache Spark中實現優化,通過DataFrame和Dataset API等方式與Spark SQL互動。無論使用哪種API或語言表達計算,在計算結果時都使用相同的執行引擎。因此,使用者可以容易地在不同API間切換。

在Apache Spark SQL中,我們可以通過四種方式使用結構化和半結構化資料:

  • 為了簡化結構化資料使用,它提供了Python,Java和Scala中的DataFrame抽象,提供了很好的優化技術。

  • 可讀取和寫入多種格式資料,比如JSON、Hive Tables和Parquet。

  • 使用SQL,我們可以從Spark程式內外部工具中查詢資料,外部工具通過標準資料庫聯結器(JDBC/ODBC)連線到Spark SQL。

  • 使用Spark SQL的最佳方法是在Spark應用程式中,這使我們能夠載入資料並使用SQL進行查詢。同時,我們還可以將它與Python、Java或Scala中的“常規”程式程式碼結合使用。

SQL從其他程式語言執行的結果將是資料集或資料框架,與SQL介面的互動使用命令列或JDBC/ODBC進行。

Spark SQL DataFrames

RDD存在一些侷限性,使用結構化資料沒有內建的優化引擎,開發人員必須優化每個RDD。此外,沒有規定處理結構化資料。Spark SQL中的DataFrame克服了RDD限制。Spark DataFrame是Spark 1.3版本,它是按命名列排序的分散式資料集。從概念來看,它等同於關聯式資料庫中的表或R/Python中的資料框架,我們可以使用以下方法建立DataFrame:

  • 結構化資料檔案

  • Hive中的表格

  • 外部資料庫

  • 使用現有的RDD

Spark SQL資料集

Spark Dataset是Spark 1.6版本中新增的介面,它是一個分散式資料集合。我們可以用JVM物件建立資料集,之後使用功能轉換(對映,過濾器等)對其進行操作,使用Scla和Java訪問資料集API。Python不支援Dataset API,但由於Python的動態特性,可以使用Dataset API的許多好處,R也如此。

Spark Catalyst Optimizer

Spark SQL使用的優化器是Catalyst,它優化了用Spark SQL和DataFrame DSL編寫的所有查詢。優化器幫助我們以比RDD對應方式更快的速度執行查詢,這提高了系統效能。

Spark Catalyst是一個基於規則的系統構建庫,每條規則都側重於具體優化。例如,ConstantFolding的重點是從查詢中消除常量表示式。

 Apache Spark SQL的使用

  • 執行SQL查詢;

  • 我們可以使用SparkSQL從existingHive安裝中讀取資料;

  • 當我們在另一種程式語言中執行SQL時,我們將得到結果作為資料集/資料框架。

由Spark SQL定義的函式

  • 內建功能:提供內建函式處理列值,可以使用以下命令訪問內建函式:

Import org.apache.spark.sql.functions
  • 使用者定義函式(UDF):UDF允許根據Scala規則建立使用者定義函式。

  • 聚合函式:它們對一組行進行操作,並計算每組的返回值。

  • 視窗化聚合(Windows):對一組行進行操作,併為組中的每一行計算返回值。

Spark SQL的優點

在本節中,我們將討論Apache Spark SQL的各種優點:

1、整合

Apache Spark SQL將SQL查詢與Spark程式整合。在Spark SQL的幫助下,我們可以將結構化資料作為分散式資料集(RDD)查詢,可以使用Spark SQL緊密整合屬性與複雜的分析演算法一起執行SQL查詢。

2、統一資料訪問

使用Spark SQL,我們可以載入和查詢不同來源資料。Schema-RDD允許單個介面高效處理結構化資料。例如,Apache Hive tables, parquet files, and JSON files.

3、高相容性

在Apache Spark SQL中,我們可以在現有倉庫上執行未修改的Hive查詢,允許使用Hive前端和MetaStore完全相容現有Hive資料,查詢和UDF。

4、標準連線

可通過JDBC或ODBC連線,包括具有行業標準JDBC和ODBC連線的伺服器模式。

5、可擴充套件性

為了支援查詢容錯和大型作業,它利用了RDD模型,使用相同的引擎進行互動式查詢。

6、效能優化

Spark SQL中的查詢優化引擎在整個計劃中選擇最佳的執行計劃。

7、用於批處理Hive表

使用Spark SQL快速批處理Hive表。

Spark SQL的缺點

除了這些功能外,Spark SQL還有一些缺點:

  • 不支援Union型別

  • 無法建立或讀取包含union欄位的表;

  • 插入超大Varchar型別不提示錯誤,即使插入值超出大小限制,也不會發生錯誤。如果從Hive讀取,則相同的資料將截斷,但如果從Spark讀取則不會截斷。SparkSQL會將varchar視為字串,這意味著沒有大小限制;

  • 不支援Transactional  表;

  • Spark SQL不支援Hive事務;

  • 不支援char型別:無法閱讀或建立包含此類欄位的表格;

  • Avro表不支援時間戳

結論

總結來說,Spark SQL是Apache Spark的一個重要模組,用於分析結構化資料,提供可擴充套件性並確保系統的高相容性。它通過JDBC或ODBC具有標準連線,提供了表達結構化資料最自然的方式。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31077337/viewspace-2214031/,如需轉載,請註明出處,否則將追究法律責任。

相關文章