7.Spark SQL
1.分析SparkSQL出現的原因,並簡述SparkSQL的起源與發展。
原因:設計一個統一的計算引擎解決所有的各型別計算,包含計算型別:
1.離線批處理;
2.互動式查詢
3.圖計算
4.流失計算
5.機器學習/迭代計算
6.Spark R 科學計算,資料分析
Shark 建立在 Hive 程式碼的基礎上,只修改了記憶體管理、物理計劃、執行 3 個模組中的部分邏輯。
Shark 通過將 Hive 的部分物理執行計劃交換出來(“swapping out the physical execution engine part of Hive"),
最終將 HiveQL 轉換為 Spark 的計算模型,使之能執行在 Spark 引擎上,從而使得 SQL 査詢的速度得到 10 ~ 100 倍的提升。
此外, Shark 的最大特性是與 Hive 完全相容,並且支援使用者編寫機器學習或資料處理函式,對 HiveQL 執行結果進行進一步分析。
2. 簡述RDD 和DataFrame的聯絡與區別。
DataFrame被稱為SchemaRDD。DataFrame使Spark具備了處理大規模結構化資料的能力。在Spark中,DataFrame是一種以RDD為基礎的分散式資料集,因此DataFrame可以完成RDD的絕大多數功能,在開發使用時,也可以呼叫方法將RDD和DataFrame進行相互轉換。DataFrame的結構類似於傳統資料庫的二維表格,並且可以從很多資料來源中建立,例如結構化檔案、外部資料庫、Hive表等資料來源。
3.DataFrame建立
spark.read.text("file:///home/hadoop/people.txt").show()
spark.read.json("file:///home/hadoop/people.json").show()
spark.read.format("text").load("file:///home/hadoop/people.txt").show()
spark.read.format("json").load("file:///home/hadoop/people.json").show()
描述從不同檔案型別生成DataFrame的區別。
用相同的txt或json檔案,同時建立RDD,比較RDD與DataFrame的區別。
同時建立RDD
sc.textFile("file:///home/hadoop/people.txt").collect()
sc.textFile("file:///home/hadoop/people.json").collect()
3.2 DataFrame的儲存
df.write.text(dir)
df.write.json(dri)
df.write.format("text").save(dir)
df.write.format("json").save(dir)
df.write.format("json").save(dir)
4.選擇題:
-
1單選(2分)關於Shark,下面描述正確的是:C
A.Shark提供了類似Pig的功能
B.Shark把SQL語句轉換成MapReduce作業
C.Shark重用了Hive中的HiveQL解析、邏輯執行計劃翻譯、執行計劃優化等邏輯
D.Shark的效能比Hive差很多 -
2單選(2分)下面關於Spark SQL架構的描述錯誤的是:D
A.在Shark原有的架構上重寫了邏輯執行計劃的優化部分,解決了Shark存在的問題
B.Spark SQL在Hive相容層面僅依賴HiveQL解析和Hive元資料
C.Spark SQL執行計劃生成和優化都由Catalyst(函式式關係查詢優化框架)負責
D.Spark SQL執行計劃生成和優化需要依賴Hive來完成 -
3單選(2分)要把一個DataFrame儲存到people.json檔案中,下面語句哪個是正確的:A
A.df.write.json("people.json")
B.df.json("people.json")
C.df.write.format("csv").save("people.json")
D.df.write.csv("people.json") -
4多選(3分)Shark的設計導致了兩個問題:AC
A.執行計劃優化完全依賴於Hive,不方便新增新的優化策略
B.執行計劃優化不依賴於Hive,方便新增新的優化策略
C.Spark是執行緒級並行,而MapReduce是程序級並行,因此,Spark在相容Hive的實現上存線上程安全問題,導致Shark不得不使用另外一套獨立維護的、打了補丁的Hive原始碼分支
D.Spark是程序級並行,而MapReduce是執行緒級並行,因此,Spark在相容Hive的實現上存線上程安全問題,導致Shark不得不使用另外一套獨立維護的、打了補丁的Hive原始碼分支 -
5 多選(3分)下面關於為什麼推出Spark SQL的原因的描述正確的是:AB
A.Spark SQL可以提供DataFrame API,可以對內部和外部各種資料來源執行各種關係操作
B.可以支援大量的資料來源和資料分析演算法,組合使用Spark SQL和Spark MLlib,可以融合傳統關係資料庫的結構化資料管理能力和機器學習演算法的資料處理能力
C.Spark SQL無法對各種不同的資料來源進行整合
D.Spark SQL無法融合結構化資料管理能力和機器學習演算法的資料處理能力 -
6多選(3分)下面關於DataFrame的描述正確的是:ABCD
A.DataFrame的推出,讓Spark具備了處理大規模結構化資料的能力
B.DataFrame比原有的RDD轉化方式更加簡單易用,而且獲得了更高的計算效能
C.Spark能夠輕鬆實現從MySQL到DataFrame的轉化,並且支援SQL查詢
D.DataFrame是一種以RDD為基礎的分散式資料集,提供了詳細的結構資訊 -
7多選(3分)要讀取people.json檔案生成DataFrame,可以使用下面哪些命令:AC
A.spark.read.json("people.json")
B.spark.read.parquet("people.json")
C.spark.read.format("json").load("people.json")
D.spark.read.format("csv").load("people.json") -
8單選(2分)以下操作中,哪個不是DataFrame的常用操作:D
A.printSchema()
B.select()
C.filter()
D.sendto() -
9多選(3分)從RDD轉換得到DataFrame包含兩種典型方法,分別是:AB
A.利用反射機制推斷RDD模式
B.使用程式設計方式定義RDD模式
C.利用投影機制推斷RDD模式
D.利用互聯機制推斷RDD模式 -
10多選(3分)使用程式設計方式定義RDD模式時,主要包括哪三個步驟:ABD
A.製作“表頭”
B.製作“表中的記錄”
C.製作對映表
D.把“表頭”和“表中的記錄”拼裝在一起