Spark SQL 使用反射推斷模式

此方法使用反射來生成包含特定類型的對象的RDD的模式。 Spark SQL的Scala接口支持將包含案例類的RDD自動轉換為DataFrame。 case類定義了表的模式。 case類的參數的名稱使用反射讀取,它們成為列的名稱。

案例類也可以嵌套或包含複雜類型,如序列或數組。 此RDD可以隱式地轉換為DataFrame,然後註冊為表。 表可以在後續的SQL語句中使用。

讓我們考慮一個名為employeeee.txt的文本文件中的員工記錄示例。 通過從文本文件讀取數據並使用默認SQL函數將其轉換為DataFrame來創建RDD。

給定數據 - 查看在運行spark shell點的當前相應目錄中名為employees.txt的文件的以下數據。

Spark SQL 使用反射推斷模式

以下示例說明如何使用“反射”生成模式。

啟動Spark Shell

使用以下命令啟動Spark Shell。

Spark SQL 使用反射推斷模式

創建SQLContext

使用以下命令生成SQLContext。 這裡,scmeans是SparkContext對象。

Spark SQL 使用反射推斷模式


導入SQL函數

使用以下命令導入用於將RDD隱式轉換為DataFrame的所有SQL函數。

Spark SQL 使用反射推斷模式

創建Case Class

接下來,我們必須使用案例類定義員工記錄數據的模式。 以下命令用於根據給定數據(id,name,age)聲明Case Class。

Spark SQL 使用反射推斷模式

創建RDD和應用轉換

使用以下命令生成RDD namedemplby,從中讀取數據fromemployee.txt並使用Map函數將其轉換為DataFrame。這裡,定義了兩個映射函數。 一個是將文本記錄分割成字段(.map(_。split(“,”)))和第二個映射函數用於將單個字段(id,name,age)轉換為一個case類對象 0).trim.toInt,e(1),e(2).trim.toInt))。最後,toDF()方法用於將具有模式的案例類對象轉換為DataFrame。

Spark SQL 使用反射推斷模式


輸出:

Spark SQL 使用反射推斷模式

將DataFrame數據存儲在表中

使用以下命令將DataFrame數據存儲到名為employeeee的表中。 在這個命令之後,我們可以應用所有類型的SQL語句。

Spark SQL 使用反射推斷模式

員工表已準備就緒。 讓我們現在使用SQLContext.sql()方法在表上傳遞一些sql查詢。
選擇DataFrame上的查詢
使用以下命令從theemployableable中選擇所有記錄。 這裡,我們使用變量allrecords來捕獲所有記錄數據。 要顯示這些記錄,請調用show()方法。

Spark SQL 使用反射推斷模式

要查看allrecords DataFrame的結果數據,請使用以下命令。

Spark SQL 使用反射推斷模式

輸出:

Spark SQL 使用反射推斷模式

子句SQL查詢數據幀

使用以下命令在表中應用where語句。 這裡,變量agefilter存儲年齡在20和35之間的僱員的記錄。

Spark SQL 使用反射推斷模式

要查看agefilter數據幀的結果數據,請使用以下命令。

Spark SQL 使用反射推斷模式

輸出:

Spark SQL 使用反射推斷模式

前兩個查詢是針對整個表DataFrame傳遞的。 現在讓我們嘗試通過對其應用Transform來從結果DataFrame獲取數據。

使用列索引從agefilter 數據幀獲取ID值以下語句用於從agefilter RDD結果中獲取ID值,使用字段索引。

Spark SQL 使用反射推斷模式

輸出

Spark SQL 使用反射推斷模式

這種基於反射的方法可以獲得更加簡潔的代碼,並且在編寫Spark應用程序時更好地瞭解其概要。


分享到:


相關文章: