6. Spark SQL和Beeline


*以下內容由《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的好處是:在多用戶間共享的緩存數據表上進行快速的數據探索

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM