首先創建SparkContext上下文:
接着引入隱身轉換,用於把RDD轉成SchemaRDD:
接下來定義一個case class 來用於描述和存儲SQL表中的每一行數據:
接下來要加載數據,這裏的測試數據是user.txt文件:
我們創建好use.txt增加內容並上傳到hdfs中:
web控制檯查詢:
hdfs命令查詢:
加載數據:
驗證數據是否加載成功:
註冊成爲user的table:
此刻user還是一個MappedRDD:
執行age 大於13 小於19的SQL查詢:
此刻的teenagers已經隱身轉換成SchemaRDD
通過collect操作觸發job的提交和執行:
結果:
DSL是Domain Specific Language的縮寫,使用DSL我們可以直接基於讀取的RDD數據進行SQL操作,無需註冊成Table。
我們重新啓動下spark-shell:
同樣使用"user.txt"的數據:
驗證user:
我們這次直接使用SQL查詢操作:
使用toDebugString查看下結果:
可以發現使用DSL的使用teenagers在內部已經被隱身轉換了SchemaRDD的實例
可以發現與前面那張註冊Table方式的結果是一樣的