*以下內容由《Spark快速大數據分析》整理所得。
讀書筆記的第六部分是講的是Spark SQL和Beeline。
Spark SQL是Spark用來操作結構化和半結構化數據的接口。
一、在應用中使用Spark SQL
二、Spark SQL UDF VS. Hive UDF
三、Beeline
一、在應用中使用Spark SQL
Spark SQL提供了一種特殊的RDD,叫作SchemaRDD。SchemaRDD是存放Row對象的RDD,每個Row對象代表一行記錄。SchemaRDD還包含記錄的結構信息(即數據字段)。有了SchemaRDD,我們就可以運行 SQL 查詢。
在應用中使用Spark SQL:
(1) 初始化Spark SQL
# 導入Spark SQL(支持Hive) from pyspark.sql import HiveContext, Row # 當不能引入hive依賴時 (不支持Hive) from pyspark.sql import SQLContext, Row # 在 Python 中創建SQL上下文環境(支持Hive) hiveCtx = HiveContext(sc) # 在 Python 中創建SQL上下文環境(不支持Hive) hiveCtx = SparkContext(sc)
(2) 基本查詢
# 例子:在Python中讀取並查詢推文 # 讀取Json文件 input = hiveCtx.jsonFile(inputFile) # 注冊輸入的SchemaRDD(將上面讀取得到的SchemaRDD放入臨時表,應用application退出時會自動刪去它) input.registerTempTable("tweets") # 依據retweetCount(轉發計數)選出推文(執行查詢) topTweets = hiveCtx.sql("""SELECT text, retweetCount FROM tweets ORDER BY retweetCount LIMIT 10""")
在上面例子中,我們是讀取了JSON文件,但我們還可以讀取其它數據格式的文件,例如: hiveCtx.parquetFile(parquetFile) 。
二、Spark SQL UDF VS. Hive UDF
(1) Spark SQL UDF
使用hiveCtx.registerFunction()自定義函數。
# 例子:Python 版本耳朵字符串長度 UDF # 寫一個求字符串長度的UDF hiveCtx.registerFunction("strLenPython", lambda x: len(x), IntegerType()) lengthSchemaRDD = hiveCtx.sql("SELECT strLenPython('text') FROM tweets LIMIT 10")
(2) Hive UDF
只需調用 hiveCtx.sql("CREATE TEMPORARY FUNCTION name AS class.function") 。
三、Beeline
Beeline是Hive 0.11版本引入的新命令行客戶端工具,基於SQLline CLI的JDBC(Java Database Connectivity: Java語言中用來規范客戶端程序如何訪問數據庫的應用程序接口)客戶端。在Beeline客戶端中,你可以使用標准的HiveQL命令來創建、列舉以及查詢數據表。Beeline shell的好處是:在多用戶間共享的緩存數據表上進行快速的數據探索。