2015年10月13日 星期二

使用 Sparck sqlContext 取得 DataFrame 後使用 DataFrame API 介紹

之前介紹 sqlContext 給予 連線位置、服務名稱等後,便可取回 DataFrame物件

以後介紹一些 我們可以透過 DataFrame 使用的API

我直接在 Spark-shell 環境作操作,基本上 Java環境操作 API的方式大同小異(前提是你得必須取得DataFrame物件)

1.取得 DataFrame on Spark-shell
請參考 Spark-shell with sqlContext to get database data
之前範例是取名叫 commits ,其實它就是 DataFrame的物件,現在改取名dataFrame比較好識別

2.dataFrame.count
計算你所連線 Table 的 row 筆數跟在DB執行 "Select count(*) from table" 一樣意思
從結果可以看出 該 Table 有 64筆資料

3. dataFrame.select("ColumnName")
and show(Integer)  (#顯示前幾筆資料)
這個範例是同時示範 select & show : 顯示 該 column name 的 前二筆資料
4.dataFrame.distinct & first
distinct : 顯示 不為  null 的資料
first: 顯示第一筆資料
合在一起: 顯示第一筆不為空的資料 
5.dataFrame.printSchema
列印出該 table 之 columnName
6.dataFrame.groupBy("columnName") & count & show
計算該欄位依值分成群組及計算筆數
可以看到我的欄位測試資料有一筆是 'H' ,60筆 'N',3筆 'Y'
所以該指令對於測試資料的內容可分出群組的欄位較有意義!

7.
重要!重要!重要!(很重要所以說三次)
使用 SQL Command 執行 Query
$ registerTempTable("定義TableName") & sqlContext.sql (Your SQL Command)
#這邊注意一下 registerTempTable 只是定義 tableName的名稱
實際上 我們在建立 dataFrame的時候已經指定了 Table,但是我們無法直接使用 SQL 語法
所以需要定義。
意即: 如果 dataFrame.registerTempTable("test_table")
然後執行 sqlContext.sql("select user_login_name from test_table where is_sys_admin='H'")
所得到的答案會是一樣的喔!^^"

今天就先簡單介紹到這邊嘍!







沒有留言:

張貼留言