(補交)7.Spark SQL
1.請分析SparkSQL出現的原因,並簡述SparkSQL的起源與發展。
SparkSQL的出現,解決了對不同資料來源和不同資料的操作,例如結構化和非結構化資料。還有可以支援融合關係查詢和複雜分析演算法。
SparkSQL的前身是Shark,Shark中提供了類似於Hive的功能。但是Shark設計中導致了兩個問題,一是執行計劃優化完全依賴Hive, 二是Spark是執行緒進行,而MapReduce是程序級並行,此此過程會導致執行緒安全問題。而轉向SparkSQL的開發。
2. 簡述RDD 和DataFrame的聯絡與區別?
RDD是分散式的Java物件的集合,但是,物件內部結構對於RDD而言是不可知的。DataFrame是一種以RDD為基礎的分散式資料集,提供了詳細的結構資訊,就相當於資料庫的一張表。
3.DataFrame的建立
spark.read.text(url)
spark.read.json(url)
注意從不同檔案型別生成DataFrame的區別。
text讀出來的是一個value值,json檔案讀的是一個實體物件
spark.read.format("text").load("people.txt")
spark.read.format("json").load("people.json")
4. PySpark-DataFrame各種常用操作
基於df的操作:
列印資料 df.show()預設列印前20條資料
列印概要 df.printSchema()
查詢總行數 df.count()
df.head(3) #list型別,list中每個元素是Row類
輸出全部行 df.collect() #list型別,list中每個元素是Row類
查詢概況 df.describe().show()
取列 df[‘name’], df.name, df[1]
基於spark.sql的操作:
建立臨時表虛擬表 df.registerTempTable('people')
spark.sql執行SQL語句 spark.sql('select name from people').show()
5. Pyspark中DataFrame與pandas中DataFrame
分別從檔案建立DataFrame
比較兩者的異同
DataFrame資料轉換成一行一行的資料。而pandas讀的資料會轉換成行列資料
pandas中DataFrame轉換為Pyspark中DataFrame
Pyspark中DataFrame轉換為pandas中DataFrame
6.從RDD轉換得到DataFrame
6.1 利用反射機制推斷RDD模式
建立RDD sc.textFile(url).map(),讀檔案,分割資料項
每個RDD元素轉換成 Row
由Row-RDD轉換到DataFrame
6.2 使用程式設計方式定義RDD模式
#下面生成“表頭”
#下面生成“表中的記錄”
#下面把“表頭”和“表中的記錄”拼裝在一起
7. DataFrame的儲存
df.write.text(dir)
df.write.format("text").save(dir)
df.write.json(dri)
df.write.format("json").save(dir)