教程:Apache Spark SQL入門及實踐指南!
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Apache Spark 入門簡介ApacheSpark
- Spark Streaming 入門指南Spark
- Spark SQL | Spark,從入門到精通SparkSQL
- spark sql 實踐(續)SparkSQL
- github actions 入門指南及部落格自動部署實踐Github
- [翻譯]Apache Spark入門簡介ApacheSpark
- Apache Flume 入門教程Apache
- PM2入門實踐指南
- Apache Doris 輕鬆入門和快速實踐Apache
- Apache Hadoop 入門教程ApacheHadoop
- Puppeteer的入門教程和實踐
- Apache Kafka教程--Kafka新手入門ApacheKafka
- Apache Commons IO入門教程Apache
- Spark 以及 spark streaming 核心原理及實踐Spark
- 10.spark sql之快速入門SparkSQL
- Maven 教程之入門指南Maven
- CSS Modules 入門及 React 中實踐CSSReact
- HTTP框架Hertz實踐入門:效能測試指南HTTP框架
- 《Django入門與實踐教程》完整版Django
- Golang 新手教程:入門速成指南Golang
- CMake入門指南-編譯教程編譯
- SQL入門-進階教程SQL
- Apache Spark Dataframe Join語法教程ApacheSpark
- Spark SQL 教程: 通過示例瞭解 Spark SQLSparkSQL
- Spark SQL 教程: 透過示例瞭解 Spark SQLSparkSQL
- Spark SQL 程式設計API入門系列之Spark SQL的作用與使用方式SparkSQL程式設計API
- 【Android開發入門教程】三.Activity入門指南!Android
- Spark流教程 :使用 Apache Spark 的Twitter情緒分析SparkApache
- python語音識別入門及實踐Python
- Apache Shiro 快速入門教程,shiro 基礎教程Apache
- BoltDB 入門實踐
- MQ 入門實踐MQ
- Docker入門實踐Docker
- Apache Kyuubi 助力 CDH 解鎖 Spark SQLApacheSparkSQL
- React實戰入門指南React
- Spark 快速入門Spark
- Spark入門篇Spark
- Postman安裝及入門教程Postman