spark簡介 introduction to spark -...
TRANSCRIPT
![Page 1: Spark簡介 Introduction to Spark - nuu.edu.twdebussy.im.nuu.edu.tw/sjchen/BigData-Spark/SparkSQL.pdf · 2020-05-11 · 國立聯合大學資訊管理學系 巨量資料課程(陳士杰)](https://reader033.vdocuments.net/reader033/viewer/2022042408/5f246f285f588578533172f2/html5/thumbnails/1.jpg)
巨量資料技術與應用Big Data Technology and Application
資訊管理學系陳士杰老師
Spark SQLFundamental Principles of Spark
![Page 2: Spark簡介 Introduction to Spark - nuu.edu.twdebussy.im.nuu.edu.tw/sjchen/BigData-Spark/SparkSQL.pdf · 2020-05-11 · 國立聯合大學資訊管理學系 巨量資料課程(陳士杰)](https://reader033.vdocuments.net/reader033/viewer/2022042408/5f246f285f588578533172f2/html5/thumbnails/2.jpg)
國立聯合大學 資訊管理學系 巨量資料課程 (陳士杰)
2
大綱
Spark SQL簡介
建立DataFrame
保存DataFrame
DataFrame的常用操作
從RDD轉成DataFrame
使用Spark SQL讀寫資料庫
![Page 3: Spark簡介 Introduction to Spark - nuu.edu.twdebussy.im.nuu.edu.tw/sjchen/BigData-Spark/SparkSQL.pdf · 2020-05-11 · 國立聯合大學資訊管理學系 巨量資料課程(陳士杰)](https://reader033.vdocuments.net/reader033/viewer/2022042408/5f246f285f588578533172f2/html5/thumbnails/3.jpg)
國立聯合大學 資訊管理學系 巨量資料課程 (陳士杰)
3
Spark SQL簡介
Spark SQL是Spark中用於結構化資料處理的元件
採用DataFrame資料模型
帶有Schema的RDD
可連結多種不同類型的資料來源
Hive, Avro, Parquet, JSON, JDBC, …
支援多種程式語言之撰寫
Scala, Java, Python, …
為何會有Spark SQL,一切需從Shark說起
![Page 4: Spark簡介 Introduction to Spark - nuu.edu.twdebussy.im.nuu.edu.tw/sjchen/BigData-Spark/SparkSQL.pdf · 2020-05-11 · 國立聯合大學資訊管理學系 巨量資料課程(陳士杰)](https://reader033.vdocuments.net/reader033/viewer/2022042408/5f246f285f588578533172f2/html5/thumbnails/4.jpg)
國立聯合大學 資訊管理學系 巨量資料課程 (陳士杰)
4
從Shark說起
• 最早,由於許多資料分析師不熟悉Java,
而無法進行深入的MapReduce程式設
計。
• 為了讓他們能使用熟悉的SQL語法來操
作HDFS上的資料,進而推出了Hive。
• 然而,Hive最大的問題點是:其底層是
基於MapReduce,而MapRecuce的
Shuffle運作又是基於硬碟,因此導致其
運作性能低下。
• 後來,Spark推出基於記憶體運作的
Shark。Shark即Hive on Spark,其性
能比Hive高一個等級,且能與Hive相容。
Hive中SQL查詢的MapReduce作業轉化過程
![Page 5: Spark簡介 Introduction to Spark - nuu.edu.twdebussy.im.nuu.edu.tw/sjchen/BigData-Spark/SparkSQL.pdf · 2020-05-11 · 國立聯合大學資訊管理學系 巨量資料課程(陳士杰)](https://reader033.vdocuments.net/reader033/viewer/2022042408/5f246f285f588578533172f2/html5/thumbnails/5.jpg)
國立聯合大學 資訊管理學系 巨量資料課程 (陳士杰)
5
• 為了與Hive相容,Shark的實作在HiveQL指令方面,重用了Hive中
HiveQL指令解析與最佳化等元件。因此,可大致視其為僅將實體執行
計畫從MapReduce作業替換成了Spark作業,透過Hive的HiveQL解析,
把HiveQL轉譯成Spark上的RDD操作。
![Page 6: Spark簡介 Introduction to Spark - nuu.edu.twdebussy.im.nuu.edu.tw/sjchen/BigData-Spark/SparkSQL.pdf · 2020-05-11 · 國立聯合大學資訊管理學系 巨量資料課程(陳士杰)](https://reader033.vdocuments.net/reader033/viewer/2022042408/5f246f285f588578533172f2/html5/thumbnails/6.jpg)
國立聯合大學 資訊管理學系 巨量資料課程 (陳士杰)
6
• Shark的設計導致了兩個問題:
• 一是指令執行最佳化仍完全依賴於Hive,不易增加新的最佳化策略,進
而限制了Shark性能提升的可能性;
• 二是因為Spark是執行緒等級並行,而MapReduce是行程等級並行,因
此,Spark在相容Hive的實作上存在執行緒安全問題,導致Shark不得不
使用另外一套獨立維護、且上了更新檔之Hive程式碼分支
• 行程(Process) vs. 執行緒(Thread) – 請參閱作業系統課程
• 因此,在2014年6月Spark宣佈不再開發Shark,全面轉向Spark SQL的
開發。從Spark1.0開始,Spark SQL成為了Spark生態系統的一員。
![Page 7: Spark簡介 Introduction to Spark - nuu.edu.twdebussy.im.nuu.edu.tw/sjchen/BigData-Spark/SparkSQL.pdf · 2020-05-11 · 國立聯合大學資訊管理學系 巨量資料課程(陳士杰)](https://reader033.vdocuments.net/reader033/viewer/2022042408/5f246f285f588578533172f2/html5/thumbnails/7.jpg)
國立聯合大學 資訊管理學系 巨量資料課程 (陳士杰)
7
Spark SQL設計
• Spark SQL在Hive相容層面僅依賴HiveQL解析、Hive中繼
資料。也就是說,從HiveQL被解析成抽象語法樹(AST)之
後,就全部由Spark SQL接管了。
• SparkSQL執行計畫生成和最佳化都由Catalyst(函數式關
係查詢最佳化框架)負責
![Page 8: Spark簡介 Introduction to Spark - nuu.edu.twdebussy.im.nuu.edu.tw/sjchen/BigData-Spark/SparkSQL.pdf · 2020-05-11 · 國立聯合大學資訊管理學系 巨量資料課程(陳士杰)](https://reader033.vdocuments.net/reader033/viewer/2022042408/5f246f285f588578533172f2/html5/thumbnails/8.jpg)
國立聯合大學 資訊管理學系 巨量資料課程 (陳士杰)
8
Spark的運作核心為RDD 。有許多不同的RDD API
RDD API的局限性
沒有Schema
因為沒有Schema,所以使用者需自已最佳化程式
從不同的資料來源讀取資料非常困難
合併多個資料來源的資料也很困難
![Page 9: Spark簡介 Introduction to Spark - nuu.edu.twdebussy.im.nuu.edu.tw/sjchen/BigData-Spark/SparkSQL.pdf · 2020-05-11 · 國立聯合大學資訊管理學系 巨量資料課程(陳士杰)](https://reader033.vdocuments.net/reader033/viewer/2022042408/5f246f285f588578533172f2/html5/thumbnails/9.jpg)
國立聯合大學 資訊管理學系 巨量資料課程 (陳士杰)
以下建立一個名為arrayrdd02的RDD,其值為[2, 3, 4, 5,
6];接著,用一個map函數將其轉換成另一個RDD,名
為Ardd02;最後,用函數檢視Ardd02的元素。
![Page 10: Spark簡介 Introduction to Spark - nuu.edu.twdebussy.im.nuu.edu.tw/sjchen/BigData-Spark/SparkSQL.pdf · 2020-05-11 · 國立聯合大學資訊管理學系 巨量資料課程(陳士杰)](https://reader033.vdocuments.net/reader033/viewer/2022042408/5f246f285f588578533172f2/html5/thumbnails/10.jpg)
國立聯合大學 資訊管理學系 巨量資料課程 (陳士杰)
10
• Spark SQL使用了SchemaRDD (Spark 1.3版本前對DataFrame的
稱呼,即:RDD + Schema,帶有Schema訊息的RDD),讓使用者
可以在SparkSQL中執行SQL語句,資料既可以來自RDD,也可以是
Hive、HDFS、Cassandra或JSON格式…等之外部資料來源
• RDD為Schema less的資料結構,只有值,沒有其它描述資訊,不易瞭
解值的意義,後續資料處理也較為複雜。
• Spark SQL目前支持Scala、Java、Python三種語言,支援SQL-92
規範
![Page 11: Spark簡介 Introduction to Spark - nuu.edu.twdebussy.im.nuu.edu.tw/sjchen/BigData-Spark/SparkSQL.pdf · 2020-05-11 · 國立聯合大學資訊管理學系 巨量資料課程(陳士杰)](https://reader033.vdocuments.net/reader033/viewer/2022042408/5f246f285f588578533172f2/html5/thumbnails/11.jpg)
國立聯合大學 資訊管理學系 巨量資料課程 (陳士杰)
11
DataFrame與Dataset
Spark SQL是佈署在Spark RDD API與運算框架之上,有
兩層:
Catalyst最佳化引擎:根據資料的分佈與特點,用以最佳化SQL
指令
兩種編寫應用程式的方法:SQL與DataFrame/Dataset API
Spark SQL不僅僅是SQL…
![Page 12: Spark簡介 Introduction to Spark - nuu.edu.twdebussy.im.nuu.edu.tw/sjchen/BigData-Spark/SparkSQL.pdf · 2020-05-11 · 國立聯合大學資訊管理學系 巨量資料課程(陳士杰)](https://reader033.vdocuments.net/reader033/viewer/2022042408/5f246f285f588578533172f2/html5/thumbnails/12.jpg)
國立聯合大學 資訊管理學系 巨量資料課程 (陳士杰)
12
使用SQL
如果使用者很熟悉SQL語法,則可使用SQL
使用DataFrame/Dataset
在Spark 1.3以前,被稱為SchemaRDD
SQL語法表達能力有限 (ex:無法迭帶)
可採用更通用的語言(Scala, Python)來表達使用者的查詢需求
使用DataFrame更快的捕獲錯誤
![Page 13: Spark簡介 Introduction to Spark - nuu.edu.twdebussy.im.nuu.edu.tw/sjchen/BigData-Spark/SparkSQL.pdf · 2020-05-11 · 國立聯合大學資訊管理學系 巨量資料課程(陳士杰)](https://reader033.vdocuments.net/reader033/viewer/2022042408/5f246f285f588578533172f2/html5/thumbnails/13.jpg)
國立聯合大學 資訊管理學系 巨量資料課程 (陳士杰)
13
DataFrame
下方左側的RDD[Person]雖然以Person為物件參數,但Spark框
架本身不瞭解Person物件的內部結構
右側的DataFrame提供了詳細的結構資訊
Spark可以清楚得知該資料集中包含哪些欄、每欄的名稱和類型為何
Spark可獲得高計算效能,並支持SQL查詢
![Page 14: Spark簡介 Introduction to Spark - nuu.edu.twdebussy.im.nuu.edu.tw/sjchen/BigData-Spark/SparkSQL.pdf · 2020-05-11 · 國立聯合大學資訊管理學系 巨量資料課程(陳士杰)](https://reader033.vdocuments.net/reader033/viewer/2022042408/5f246f285f588578533172f2/html5/thumbnails/14.jpg)
國立聯合大學 資訊管理學系 巨量資料課程 (陳士杰)
14
以Row物件為主的分散式資料集合
如同RDD,不可改變且具有容錯能力
處理結構化資料
自帶最佳化工具Catalyst,可自動最佳化程式
提供一套Data source API,可將不同資料來源的資料,轉換成
RDD[Row] => DataFrame
![Page 15: Spark簡介 Introduction to Spark - nuu.edu.twdebussy.im.nuu.edu.tw/sjchen/BigData-Spark/SparkSQL.pdf · 2020-05-11 · 國立聯合大學資訊管理學系 巨量資料課程(陳士杰)](https://reader033.vdocuments.net/reader033/viewer/2022042408/5f246f285f588578533172f2/html5/thumbnails/15.jpg)
國立聯合大學 資訊管理學系 巨量資料課程 (陳士杰)
RDD、DataFrame、Dataset綜整
RDD
第一代Spark API
起源自Spark 0
彈性分散式資料集
不包含Schema
非結構性資料,後續
處理上不方便
DataFrame
第二代Spark API
起源自Spark 1.3
欄(Column)為主的分
散式資料集
包含Schema
結構性資料,後續處
理、計算或壓縮上較
RDD方便且有效率
Dataset
第三代Spark API
起源自Spark 1.6。Spark 2.0後整合
DataFrame成為Dataset的特例
Encoder的分散式資料集
序列化的結構性資料,已將資料編
碼轉換成二進制序列。
Spark自行發展一套編碼與反編碼的
規則。某些操作無需序列化,執行
效能更高於DataFrame
![Page 16: Spark簡介 Introduction to Spark - nuu.edu.twdebussy.im.nuu.edu.tw/sjchen/BigData-Spark/SparkSQL.pdf · 2020-05-11 · 國立聯合大學資訊管理學系 巨量資料課程(陳士杰)](https://reader033.vdocuments.net/reader033/viewer/2022042408/5f246f285f588578533172f2/html5/thumbnails/16.jpg)
國立聯合大學 資訊管理學系 巨量資料課程 (陳士杰)
相同點:
RDD、DataFrame、Dataset全都是spark平臺下的彈性分散式
資料集,為處理超大型資料提供便利性
三者都有惰性機制,在進行建立、轉換,如map方法時,不會立
即執行,只有在遇到Action如foreach時,三者才會開始自頭至
尾加以運算
極端情況下,如果程式碼內有建立、轉換而沒有Action操作時,在
執行時會被直接跳過
三者都會根據spark的記憶體情況自動快取運算,這樣即使資料
量很大,也不用擔心會記憶體滿溢情況
三者都有partition的概念
三都有共同的函數,如filter等
無論使用哪種API (Dataframe或Dataset),內部最終計
算都在RDD上完成。
![Page 17: Spark簡介 Introduction to Spark - nuu.edu.twdebussy.im.nuu.edu.tw/sjchen/BigData-Spark/SparkSQL.pdf · 2020-05-11 · 國立聯合大學資訊管理學系 巨量資料課程(陳士杰)](https://reader033.vdocuments.net/reader033/viewer/2022042408/5f246f285f588578533172f2/html5/thumbnails/17.jpg)
國立聯合大學 資訊管理學系 巨量資料課程 (陳士杰)
建立DataFrame
在Spark 1.6之前,要將資料載入到Spark進行處理,需先
透過SparkContext將待處理資料轉換成RDD物件。
同樣的,要在Spark內進行DataFrame相關資料操作,就
要將資料轉換成DataFrame物件,而SQLContext和
HiveContext可以達成此需求。
SQLContext可以將資料轉換成DataFrame物件以進行SQL操作
HiveContext可以將資料轉換成DataFrame物件以進行HiveQL
的操作。
而在Spark的其它API也需要使用不同的Context,例如:
關於串流資料Streaming的處理,可以使用StreamingContext
將資料轉換成可進行Spark Streaming操作的物件。
![Page 18: Spark簡介 Introduction to Spark - nuu.edu.twdebussy.im.nuu.edu.tw/sjchen/BigData-Spark/SparkSQL.pdf · 2020-05-11 · 國立聯合大學資訊管理學系 巨量資料課程(陳士杰)](https://reader033.vdocuments.net/reader033/viewer/2022042408/5f246f285f588578533172f2/html5/thumbnails/18.jpg)
國立聯合大學 資訊管理學系 巨量資料課程 (陳士杰)
Spark2.0以後的版本,使用全新的SparkSession介面替
代過去的SQLContext及HiveContext介面來實現其對資
料載入、轉換、處理等功能,並實現SQLContext及
HiveContext所有功能
SparkSession支援從不同的資料來源載入資料,並把資料轉換成
DataFrame,同時也支援把DataFrame轉換成SQLContext自身
的表格,然後使用SQL指令來進行運算。
SparkSession亦提供HiveQL以及其他依賴於Hive的功能支援
未來有可能連StreamingContext也會被併入
![Page 19: Spark簡介 Introduction to Spark - nuu.edu.twdebussy.im.nuu.edu.tw/sjchen/BigData-Spark/SparkSQL.pdf · 2020-05-11 · 國立聯合大學資訊管理學系 巨量資料課程(陳士杰)](https://reader033.vdocuments.net/reader033/viewer/2022042408/5f246f285f588578533172f2/html5/thumbnails/19.jpg)
國立聯合大學 資訊管理學系 巨量資料課程 (陳士杰)
與SparkContext相同,在Spark Shell或PySpark互動環
境時,已預設提供了一個SparkContext物件(名為sc)與
SparkSession物件(名為spark)。
當開發人員撰寫獨立程式時,就需要自行建立一個
SparkSession物件,指令如下所示:
![Page 20: Spark簡介 Introduction to Spark - nuu.edu.twdebussy.im.nuu.edu.tw/sjchen/BigData-Spark/SparkSQL.pdf · 2020-05-11 · 國立聯合大學資訊管理學系 巨量資料課程(陳士杰)](https://reader033.vdocuments.net/reader033/viewer/2022042408/5f246f285f588578533172f2/html5/thumbnails/20.jpg)
國立聯合大學 資訊管理學系 巨量資料課程 (陳士杰)
接下來可以用spark.read這個SparkSession物件方法,
將不同類型的文件資料載入並建立DataFrame物件,指
令變化如下所示:
上述指令僅簡化表示,在實際讀取文件時,需要給定正確的文件
所在路徑,不論是在OS本地端的檔案系統、或是在HDFS分散式
檔案系統中皆然。
我們可用以下指令來替代上方指令來從事相同的工作:
![Page 21: Spark簡介 Introduction to Spark - nuu.edu.twdebussy.im.nuu.edu.tw/sjchen/BigData-Spark/SparkSQL.pdf · 2020-05-11 · 國立聯合大學資訊管理學系 巨量資料課程(陳士杰)](https://reader033.vdocuments.net/reader033/viewer/2022042408/5f246f285f588578533172f2/html5/thumbnails/21.jpg)
國立聯合大學 資訊管理學系 巨量資料課程 (陳士杰)
說明範例
我們利用Spark提供的範例來說明如何建立DataFrame,
這些範例在/usr/local/spark/examples/src/main/resources/,
有兩個範例資料people.json和people .txt,內容如下圖所示:
![Page 22: Spark簡介 Introduction to Spark - nuu.edu.twdebussy.im.nuu.edu.tw/sjchen/BigData-Spark/SparkSQL.pdf · 2020-05-11 · 國立聯合大學資訊管理學系 巨量資料課程(陳士杰)](https://reader033.vdocuments.net/reader033/viewer/2022042408/5f246f285f588578533172f2/html5/thumbnails/22.jpg)
國立聯合大學 資訊管理學系 巨量資料課程 (陳士杰)
示範在PySpark互動環境下建立DataFrame:
首先,啟動命令列視窗,並輸入以下指令以進入PySpark環境:
進入PySpark後,執行以下指令,輸入people.json文件以產生名
為df的DataFrame物件,再利用.show()方法顯示物件的內容:
![Page 23: Spark簡介 Introduction to Spark - nuu.edu.twdebussy.im.nuu.edu.tw/sjchen/BigData-Spark/SparkSQL.pdf · 2020-05-11 · 國立聯合大學資訊管理學系 巨量資料課程(陳士杰)](https://reader033.vdocuments.net/reader033/viewer/2022042408/5f246f285f588578533172f2/html5/thumbnails/23.jpg)
國立聯合大學 資訊管理學系 巨量資料課程 (陳士杰)
保存DataFrame
使用spark.write這個SparkSession物件方法,將
DataFram物件保存成不同類型的文件目錄,指令變化如
下所示:
上述指令僅簡化表示,在實際寫入文件時,需要給定正確的文件
目錄所在路徑,不論是在OS本地端的檔案系統、或是在HDFS分
散式檔案系統中皆然。
也可用以下指令來替代上方指令來從事相同的工作:
![Page 24: Spark簡介 Introduction to Spark - nuu.edu.twdebussy.im.nuu.edu.tw/sjchen/BigData-Spark/SparkSQL.pdf · 2020-05-11 · 國立聯合大學資訊管理學系 巨量資料課程(陳士杰)](https://reader033.vdocuments.net/reader033/viewer/2022042408/5f246f285f588578533172f2/html5/thumbnails/24.jpg)
國立聯合大學 資訊管理學系 巨量資料課程 (陳士杰)
前述指令"看似"是產生出新的文件以保存DataFrame物
件。然而,實際上是產生檔案目錄,而不是文件。
在PySpark環境執行下述範例:
先利用Spark提供的範例資料people.json,來建立一個名為
peopleDF的DataFrame物件
接著再將peopleDF中的“name”與“age”這兩個欄位資料,
存入到另一個名為newpeople.json的目錄中。
接著從peopleDF中選取“name”欄,並將該欄資料保存到另一
個名為newpeople.txt的目錄中。
![Page 25: Spark簡介 Introduction to Spark - nuu.edu.twdebussy.im.nuu.edu.tw/sjchen/BigData-Spark/SparkSQL.pdf · 2020-05-11 · 國立聯合大學資訊管理學系 巨量資料課程(陳士杰)](https://reader033.vdocuments.net/reader033/viewer/2022042408/5f246f285f588578533172f2/html5/thumbnails/25.jpg)
國立聯合大學 資訊管理學系 巨量資料課程 (陳士杰)
25
![Page 26: Spark簡介 Introduction to Spark - nuu.edu.twdebussy.im.nuu.edu.tw/sjchen/BigData-Spark/SparkSQL.pdf · 2020-05-11 · 國立聯合大學資訊管理學系 巨量資料課程(陳士杰)](https://reader033.vdocuments.net/reader033/viewer/2022042408/5f246f285f588578533172f2/html5/thumbnails/26.jpg)
國立聯合大學 資訊管理學系 巨量資料課程 (陳士杰)
以下先建立名為df的示範用DataFrame物件,再進行常
用操作的介紹。
啟動命令列視窗,並輸入以下指令以進入PySpark環境:
進入PySpark後,執行以下指令,輸入people.json文件以產生名
為df的DataFrame物件,再利用.show()方法顯示物件的內容:
DataFrame常用操作
![Page 27: Spark簡介 Introduction to Spark - nuu.edu.twdebussy.im.nuu.edu.tw/sjchen/BigData-Spark/SparkSQL.pdf · 2020-05-11 · 國立聯合大學資訊管理學系 巨量資料課程(陳士杰)](https://reader033.vdocuments.net/reader033/viewer/2022042408/5f246f285f588578533172f2/html5/thumbnails/27.jpg)
國立聯合大學 資訊管理學系 巨量資料課程 (陳士杰)
printSchema():將指定的DataFrame之架構(即:其
metadata)列出。
上述的nullable = true是指該欄位是否可存空值
select():將DataFrame之某些Column資料列出來。
以下指令將df的"name"欄位資料與"age"欄位資料+1後的結果顯
示出來
![Page 28: Spark簡介 Introduction to Spark - nuu.edu.twdebussy.im.nuu.edu.tw/sjchen/BigData-Spark/SparkSQL.pdf · 2020-05-11 · 國立聯合大學資訊管理學系 巨量資料課程(陳士杰)](https://reader033.vdocuments.net/reader033/viewer/2022042408/5f246f285f588578533172f2/html5/thumbnails/28.jpg)
國立聯合大學 資訊管理學系 巨量資料課程 (陳士杰)
filter():類似SQL中的"where條件式",做為資料過濾條
件之用。
執行以下指令,將"age"大於20的資料顯示出來。
groupBy():根據某個欄位進行資料分群。
執行以下指令,計數以age為基礎之各個群體的非空資料個數。
![Page 29: Spark簡介 Introduction to Spark - nuu.edu.twdebussy.im.nuu.edu.tw/sjchen/BigData-Spark/SparkSQL.pdf · 2020-05-11 · 國立聯合大學資訊管理學系 巨量資料課程(陳士杰)](https://reader033.vdocuments.net/reader033/viewer/2022042408/5f246f285f588578533172f2/html5/thumbnails/29.jpg)
國立聯合大學 資訊管理學系 巨量資料課程 (陳士杰)
sort():根據某個欄位進行資料升/降冪排序。
執行以下指令,以"age"進行升/降冪排序。
![Page 30: Spark簡介 Introduction to Spark - nuu.edu.twdebussy.im.nuu.edu.tw/sjchen/BigData-Spark/SparkSQL.pdf · 2020-05-11 · 國立聯合大學資訊管理學系 巨量資料課程(陳士杰)](https://reader033.vdocuments.net/reader033/viewer/2022042408/5f246f285f588578533172f2/html5/thumbnails/30.jpg)
國立聯合大學 資訊管理學系 巨量資料課程 (陳士杰)
將RDD轉換成DataFrame的型式,共有兩種做法:
1.使用反射(Reflection)以推斷RDD模式,
2. 使用程式撰寫來指定RDD模式。
以下利用
"/usr/local/spark/examples/src/main/resources/"下的
people.txt做為範例進行操作。people.txt的資料格式如
下所示:
從RDD轉換得到DataFrame
![Page 31: Spark簡介 Introduction to Spark - nuu.edu.twdebussy.im.nuu.edu.tw/sjchen/BigData-Spark/SparkSQL.pdf · 2020-05-11 · 國立聯合大學資訊管理學系 巨量資料課程(陳士杰)](https://reader033.vdocuments.net/reader033/viewer/2022042408/5f246f285f588578533172f2/html5/thumbnails/31.jpg)
國立聯合大學 資訊管理學系 巨量資料課程 (陳士杰)
利用反射以推斷RDD模式
此方法適用於對已知資料結構的RDD進行轉換。
在PySpark互動環境逐行執行以下指令,以進行RDD模式
推斷與轉換的工作。
![Page 32: Spark簡介 Introduction to Spark - nuu.edu.twdebussy.im.nuu.edu.tw/sjchen/BigData-Spark/SparkSQL.pdf · 2020-05-11 · 國立聯合大學資訊管理學系 巨量資料課程(陳士杰)](https://reader033.vdocuments.net/reader033/viewer/2022042408/5f246f285f588578533172f2/html5/thumbnails/32.jpg)
國立聯合大學 資訊管理學系 巨量資料課程 (陳士杰)
上述2~5行程式碼運作過程如下圖所示:
![Page 33: Spark簡介 Introduction to Spark - nuu.edu.twdebussy.im.nuu.edu.tw/sjchen/BigData-Spark/SparkSQL.pdf · 2020-05-11 · 國立聯合大學資訊管理學系 巨量資料課程(陳士杰)](https://reader033.vdocuments.net/reader033/viewer/2022042408/5f246f285f588578533172f2/html5/thumbnails/33.jpg)
國立聯合大學 資訊管理學系 巨量資料課程 (陳士杰)
執行結果如下所示
33
![Page 34: Spark簡介 Introduction to Spark - nuu.edu.twdebussy.im.nuu.edu.tw/sjchen/BigData-Spark/SparkSQL.pdf · 2020-05-11 · 國立聯合大學資訊管理學系 巨量資料課程(陳士杰)](https://reader033.vdocuments.net/reader033/viewer/2022042408/5f246f285f588578533172f2/html5/thumbnails/34.jpg)
國立聯合大學 資訊管理學系 巨量資料課程 (陳士杰)
使用程式撰寫來指定模式
當無法確知資料結構時,就需要採用程式撰寫來指定
RDD模式。
主要的撰寫程序是:
製作表頭
製作表中的記錄
將表頭與記錄結合在一起
回到PySpark互動環境,我們可以逐行執行以下指令以完
成上述工作。
![Page 35: Spark簡介 Introduction to Spark - nuu.edu.twdebussy.im.nuu.edu.tw/sjchen/BigData-Spark/SparkSQL.pdf · 2020-05-11 · 國立聯合大學資訊管理學系 巨量資料課程(陳士杰)](https://reader033.vdocuments.net/reader033/viewer/2022042408/5f246f285f588578533172f2/html5/thumbnails/35.jpg)
國立聯合大學 資訊管理學系 巨量資料課程 (陳士杰)
![Page 36: Spark簡介 Introduction to Spark - nuu.edu.twdebussy.im.nuu.edu.tw/sjchen/BigData-Spark/SparkSQL.pdf · 2020-05-11 · 國立聯合大學資訊管理學系 巨量資料課程(陳士杰)](https://reader033.vdocuments.net/reader033/viewer/2022042408/5f246f285f588578533172f2/html5/thumbnails/36.jpg)
國立聯合大學 資訊管理學系 巨量資料課程 (陳士杰)
執行結果如下:
![Page 37: Spark簡介 Introduction to Spark - nuu.edu.twdebussy.im.nuu.edu.tw/sjchen/BigData-Spark/SparkSQL.pdf · 2020-05-11 · 國立聯合大學資訊管理學系 巨量資料課程(陳士杰)](https://reader033.vdocuments.net/reader033/viewer/2022042408/5f246f285f588578533172f2/html5/thumbnails/37.jpg)
國立聯合大學 資訊管理學系 巨量資料課程 (陳士杰)
使用Spark SQL讀寫資料庫
SparkSQL除了可以支援Parquet、JSON、Hive等資料源
,也可以透過JDBC連接外部的關聯式資料庫。
前置工作
讀取MySQL資料庫中的資料
向MySQL資料庫寫入資料
![Page 38: Spark簡介 Introduction to Spark - nuu.edu.twdebussy.im.nuu.edu.tw/sjchen/BigData-Spark/SparkSQL.pdf · 2020-05-11 · 國立聯合大學資訊管理學系 巨量資料課程(陳士杰)](https://reader033.vdocuments.net/reader033/viewer/2022042408/5f246f285f588578533172f2/html5/thumbnails/38.jpg)
國立聯合大學 資訊管理學系 巨量資料課程 (陳士杰)
前置工作
假設MySQL資料庫系統已安裝完畢。首先,開啟一個新
的終端機畫面,並輸入下列指令以啟動MySQL服務(需輸
入密碼以驗証身份,密碼:hadoop)。
再執行下列指令,並輸入用戶root的密碼 (密碼:
hadoop),以啟動MySQL Shell模式。
![Page 39: Spark簡介 Introduction to Spark - nuu.edu.twdebussy.im.nuu.edu.tw/sjchen/BigData-Spark/SparkSQL.pdf · 2020-05-11 · 國立聯合大學資訊管理學系 巨量資料課程(陳士杰)](https://reader033.vdocuments.net/reader033/viewer/2022042408/5f246f285f588578533172f2/html5/thumbnails/39.jpg)
國立聯合大學 資訊管理學系 巨量資料課程 (陳士杰)
接著,輸入以下的SQL指令,以完成名為spark的資料庫
與名為student的表格之建立。
![Page 40: Spark簡介 Introduction to Spark - nuu.edu.twdebussy.im.nuu.edu.tw/sjchen/BigData-Spark/SparkSQL.pdf · 2020-05-11 · 國立聯合大學資訊管理學系 巨量資料課程(陳士杰)](https://reader033.vdocuments.net/reader033/viewer/2022042408/5f246f285f588578533172f2/html5/thumbnails/40.jpg)
國立聯合大學 資訊管理學系 巨量資料課程 (陳士杰)
接下來,下載MySQL的JDBC驅動程式,如:mysql-
connector-java-8.0.19.jar
![Page 41: Spark簡介 Introduction to Spark - nuu.edu.twdebussy.im.nuu.edu.tw/sjchen/BigData-Spark/SparkSQL.pdf · 2020-05-11 · 國立聯合大學資訊管理學系 巨量資料課程(陳士杰)](https://reader033.vdocuments.net/reader033/viewer/2022042408/5f246f285f588578533172f2/html5/thumbnails/41.jpg)
國立聯合大學 資訊管理學系 巨量資料課程 (陳士杰)
接著拷貝到Spark的安裝目錄“/usr/local/spark/jars/”
下,並啟動PySpark環境
41
![Page 42: Spark簡介 Introduction to Spark - nuu.edu.twdebussy.im.nuu.edu.tw/sjchen/BigData-Spark/SparkSQL.pdf · 2020-05-11 · 國立聯合大學資訊管理學系 巨量資料課程(陳士杰)](https://reader033.vdocuments.net/reader033/viewer/2022042408/5f246f285f588578533172f2/html5/thumbnails/42.jpg)
國立聯合大學 資訊管理學系 巨量資料課程 (陳士杰)
讀取MySQL資料庫中的資料
啟動PySpark後,可以執行以下指令以連接資料庫、讀取
資料庫內的資料,形成DataFrame物件並顯示於螢幕上
。
![Page 43: Spark簡介 Introduction to Spark - nuu.edu.twdebussy.im.nuu.edu.tw/sjchen/BigData-Spark/SparkSQL.pdf · 2020-05-11 · 國立聯合大學資訊管理學系 巨量資料課程(陳士杰)](https://reader033.vdocuments.net/reader033/viewer/2022042408/5f246f285f588578533172f2/html5/thumbnails/43.jpg)
國立聯合大學 資訊管理學系 巨量資料課程 (陳士杰)
向MySQL資料庫寫入資料
剛剛在MySQL執行環境下建立了一個名稱為spark的資料
庫,並在該資料庫裡建立了一個名稱為student的表格。
輸入以下的SQL指令以再次確認名為student的表格內的
內容。
![Page 44: Spark簡介 Introduction to Spark - nuu.edu.twdebussy.im.nuu.edu.tw/sjchen/BigData-Spark/SparkSQL.pdf · 2020-05-11 · 國立聯合大學資訊管理學系 巨量資料課程(陳士杰)](https://reader033.vdocuments.net/reader033/viewer/2022042408/5f246f285f588578533172f2/html5/thumbnails/44.jpg)
國立聯合大學 資訊管理學系 巨量資料課程 (陳士杰)
接著,回到PySpark互動環境,逐行執行以下指令,往
spark.student表格中插入兩筆記錄。
![Page 45: Spark簡介 Introduction to Spark - nuu.edu.twdebussy.im.nuu.edu.tw/sjchen/BigData-Spark/SparkSQL.pdf · 2020-05-11 · 國立聯合大學資訊管理學系 巨量資料課程(陳士杰)](https://reader033.vdocuments.net/reader033/viewer/2022042408/5f246f285f588578533172f2/html5/thumbnails/45.jpg)
國立聯合大學 資訊管理學系 巨量資料課程 (陳士杰)
執行完上述指令後,回到MySQL執行環境,輸入以下的
SQL指令看看名為student的表格內容是否有變動。
很明顯地可以看出,student這張表中真的多出了兩列的資料,
而這兩列資料是由Spark新增的。
![Page 46: Spark簡介 Introduction to Spark - nuu.edu.twdebussy.im.nuu.edu.tw/sjchen/BigData-Spark/SparkSQL.pdf · 2020-05-11 · 國立聯合大學資訊管理學系 巨量資料課程(陳士杰)](https://reader033.vdocuments.net/reader033/viewer/2022042408/5f246f285f588578533172f2/html5/thumbnails/46.jpg)
國立聯合大學 資訊管理學系 巨量資料課程 (陳士杰)
46
本章小結
• 本章首先介紹了SparkSQL的起源與發展。
• 接著介紹了SparkSQL的資料模型DataFrame,它是由Schema+RDD
的結構化分散式資料集,相當於關聯式資料庫系統中的二維表格。
• 建構好的DataFrame可以執行一些常用的操作。
• 最後介紹了SparkSQL利用JDBC連接MySQL資料庫系統,以進行資料
讀寫操作。
![Page 47: Spark簡介 Introduction to Spark - nuu.edu.twdebussy.im.nuu.edu.tw/sjchen/BigData-Spark/SparkSQL.pdf · 2020-05-11 · 國立聯合大學資訊管理學系 巨量資料課程(陳士杰)](https://reader033.vdocuments.net/reader033/viewer/2022042408/5f246f285f588578533172f2/html5/thumbnails/47.jpg)
國立聯合大學 資訊管理學系 巨量資料課程 (陳士杰)
4747
-本單元結束-
感謝您的聆聽