1. 程式人生 > 其它 >(補交)7.Spark SQL

(補交)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)