Spark SQL—1—簡介、應用
阿新 • • 發佈:2018-12-02
- Spark SQL比較HiveSQL
- Hive:將Hive SQL轉換成MapReduce然後提交到叢集上執行,簡化了編寫MapReduce的程式
- 由於MapReduce這種計算模型執行效率比較慢。
- Spark SQL的應運而生,它是將Spark SQL轉換成RDD,然後提交到叢集執行,執行效率非常快
- Hive:將Hive SQL轉換成MapReduce然後提交到叢集上執行,簡化了編寫MapReduce的程式
- Spark SQL應用場景
- ETL:
- Extract抽取
- 資料來源:HDFS、S3、本地、關係資料庫(Oracle、MySQL)、NOSQL(HBase、Cassandra)。。
- 資料型別:json、csv、xml。
- Transform清洗空值的處理、拆分資料、規範化數格式、資料替換。。。
- Load載入:儲存到各種資料來源中
- Extract抽取
- 分散式查詢:可以作為分散式sql查詢引擎,通過jdbc/odbc或指令對資料庫進行分散式查詢
- 結合spark streaming,處理實時資料流
- 結合MTLlib進行機器學習
- ETL:
- DataFrame
- 與RDD類似,也是一個分散式資料容器。
- DataFrame更像傳統資料庫的二維表格,除了資料以外,還記錄
- 同時,與Hive類似,DataFrame也支援巢狀資料型別(struct、array和map)。
- 從API易用性的角度上 看,DataFrame API提供的是一套高層的關係操作,比函式式的RDD API要更加友好,門檻更低。由於與R和Pandas的DataFrame類似,Spark DataFrame很好地繼承了傳統單機資料分析的開發體驗
- DateFrame兩種程式設計風格
- DSL風格
//檢視DataFrame部分列中的內容 personDF.select(personDF.col("name")).show personDF.select(col("name"), col("age")).show personDF.select("name").show //列印DataFrame的Schema資訊 personDF.printSchema //查詢所有的name和age,並將age+1 personDF.select(col("id"), col("name"), col("age") + 1).show personDF.select(personDF("id"), personDF("name"), personDF("age") + 1).show
- sql風格
//如果想使用SQL風格的語法,需要將DataFrame註冊成表 personDF.registerTempTable("t_person") //查詢年齡最大的前兩名 sqlContext.sql("select * from t_person order by age desc limit 2").show //顯示錶的Schema資訊 sqlContext.sql("desc t_person").show
- DSL風格