1. 程式人生 > 其它 >7.Spark SQL 7.Spark SQL

7.Spark SQL 7.Spark SQL

7.Spark SQL

 

1.請分析SparkSQL出現的原因,並簡述SparkSQL的起源與發展。

因為關係資料庫已經很流行,而且關係資料庫在大資料時代已經不能滿足要求。首先,使用者需要從不同資料來源執行各種操作,包括結構化、半結構化和非結構化資料。其次,使用者需要執行高階分析,比如機器學習和影象處理。在實際大資料應用中,經常需要融合關係查詢和複雜分析演算法(比如機器學習或影象處理),但是,缺少這樣的系統。

Spark SQL填補了這個鴻溝:首先,可以提供DataFrame API,可以對內部和外部各種資料來源執行各種關係型操作。其次,可以支援大資料中的大量資料來源和資料分析演算法Spark SQL可以融合:傳統關係資料庫的結構化資料管理能力和機器學習演算法的資料處理能力。

2.簡述RDD和DataFrame的聯絡與區別?

區別:
RDD是分散式的java物件的集合,但是物件內部結構對於RDD而言卻是不可知的。
DataFrame是一種以RDD為基礎的分散式資料集,提供了詳細的結構資訊,相當於關係資料庫中的一張表。

聯絡:
1.都是spark平臺下的分散式彈性資料集,為處理超大型資料提供便利。
2、都有惰性機制,在進行建立、轉換,如map方法時,不會立即執行,只有在遇到Action才會運算。
3.都會根據spark的記憶體情況自動快取運算,這樣即使資料量很大,也不用擔心會記憶體溢位
4、三者都有partition的概念。
5.三者有許多共同的函式,如filter,排序等。

3.DataFrame的建立

spark.read.text(url)

spark.read.json(url)

 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]

基於sparksql的操作:

建立臨時表虛擬表 df.registerTempTable('people')

spark.sql執行SQL語句 spark.sql('select name from people').show()

5. Pyspark中DataFrame與pandas中DataFrame

分別從檔案建立DataFrame

比較兩者的異同

pandas中DataFrame轉換為Pyspark中DataFrame

Pyspark中DataFrame轉換為pandas中DataFrame

6.從RDD轉換得到DataFrame

6.1 利用反射機制推斷RDD模式

建立RDD sc.textFile(url).map(),讀檔案,分割資料項

每個RDD元素轉換成 Row

由Row-RDD轉換到DataFrame

1.請分析SparkSQL出現的原因,並簡述SparkSQL的起源與發展。

因為關係資料庫已經很流行,而且關係資料庫在大資料時代已經不能滿足要求。首先,使用者需要從不同資料來源執行各種操作,包括結構化、半結構化和非結構化資料。其次,使用者需要執行高階分析,比如機器學習和影象處理。在實際大資料應用中,經常需要融合關係查詢和複雜分析演算法(比如機器學習或影象處理),但是,缺少這樣的系統。

Spark SQL填補了這個鴻溝:首先,可以提供DataFrame API,可以對內部和外部各種資料來源執行各種關係型操作。其次,可以支援大資料中的大量資料來源和資料分析演算法Spark SQL可以融合:傳統關係資料庫的結構化資料管理能力和機器學習演算法的資料處理能力。

2.簡述RDD和DataFrame的聯絡與區別?

區別:
RDD是分散式的java物件的集合,但是物件內部結構對於RDD而言卻是不可知的。
DataFrame是一種以RDD為基礎的分散式資料集,提供了詳細的結構資訊,相當於關係資料庫中的一張表。

聯絡:
1.都是spark平臺下的分散式彈性資料集,為處理超大型資料提供便利。
2、都有惰性機制,在進行建立、轉換,如map方法時,不會立即執行,只有在遇到Action才會運算。
3.都會根據spark的記憶體情況自動快取運算,這樣即使資料量很大,也不用擔心會記憶體溢位
4、三者都有partition的概念。
5.三者有許多共同的函式,如filter,排序等。

3.DataFrame的建立

spark.read.text(url)

spark.read.json(url)

 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]

基於sparksql的操作:

建立臨時表虛擬表 df.registerTempTable('people')

spark.sql執行SQL語句 spark.sql('select name from people').show()

5. Pyspark中DataFrame與pandas中DataFrame

分別從檔案建立DataFrame

比較兩者的異同

pandas中DataFrame轉換為Pyspark中DataFrame

Pyspark中DataFrame轉換為pandas中DataFrame

6.從RDD轉換得到DataFrame

6.1 利用反射機制推斷RDD模式

建立RDD sc.textFile(url).map(),讀檔案,分割資料項

每個RDD元素轉換成 Row

由Row-RDD轉換到DataFrame