此方法使用反射來生成包含特定類型的對象的RDD的模式。 Spark SQL的Scala接口支持將包含案例類的RDD自動轉換為DataFrame。 case類定義了表的模式。 case類的參數的名稱使用反射讀取,它們成為列的名稱。
案例類也可以嵌套或包含複雜類型,如序列或數組。 此RDD可以隱式地轉換為DataFrame,然後註冊為表。 表可以在後續的SQL語句中使用。
例
讓我們考慮一個名為employeeee.txt的文本文件中的員工記錄示例。 通過從文本文件讀取數據並使用默認SQL函數將其轉換為DataFrame來創建RDD。
給定數據 - 查看在運行spark shell點的當前相應目錄中名為employees.txt的文件的以下數據。
以下示例說明如何使用“反射”生成模式。
啟動Spark Shell
使用以下命令啟動Spark Shell。
創建SQLContext
使用以下命令生成SQLContext。 這裡,scmeans是SparkContext對象。
導入SQL函數
使用以下命令導入用於將RDD隱式轉換為DataFrame的所有SQL函數。
創建Case Class
接下來,我們必須使用案例類定義員工記錄數據的模式。 以下命令用於根據給定數據(id,name,age)聲明Case Class。
創建RDD和應用轉換
使用以下命令生成RDD namedemplby,從中讀取數據fromemployee.txt並使用Map函數將其轉換為DataFrame。這裡,定義了兩個映射函數。 一個是將文本記錄分割成字段(.map(_。split(“,”)))和第二個映射函數用於將單個字段(id,name,age)轉換為一個case類對象 0).trim.toInt,e(1),e(2).trim.toInt))。最後,toDF()方法用於將具有模式的案例類對象轉換為DataFrame。
輸出:
將DataFrame數據存儲在表中
使用以下命令將DataFrame數據存儲到名為employeeee的表中。 在這個命令之後,我們可以應用所有類型的SQL語句。
員工表已準備就緒。 讓我們現在使用SQLContext.sql()方法在表上傳遞一些sql查詢。
選擇DataFrame上的查詢
使用以下命令從theemployableable中選擇所有記錄。 這裡,我們使用變量allrecords來捕獲所有記錄數據。 要顯示這些記錄,請調用show()方法。
要查看allrecords DataFrame的結果數據,請使用以下命令。
輸出:
子句SQL查詢數據幀
使用以下命令在表中應用where語句。 這裡,變量agefilter存儲年齡在20和35之間的僱員的記錄。
要查看agefilter數據幀的結果數據,請使用以下命令。
輸出:
前兩個查詢是針對整個表DataFrame傳遞的。 現在讓我們嘗試通過對其應用Transform來從結果DataFrame獲取數據。
使用列索引從agefilter 數據幀獲取ID值以下語句用於從agefilter RDD結果中獲取ID值,使用字段索引。
輸出
這種基於反射的方法可以獲得更加簡潔的代碼,並且在編寫Spark應用程序時更好地瞭解其概要。
閱讀更多 會飛的魚go 的文章