1. 程式人生 > >Spark SQL—1—簡介、應用

Spark SQL—1—簡介、應用

  1. Spark SQL比較HiveSQL
    1. Hive:將Hive SQL轉換成MapReduce然後提交到叢集上執行,簡化了編寫MapReduce的程式
      1. 由於MapReduce這種計算模型執行效率比較慢。
    2. Spark SQL的應運而生,它是將Spark SQL轉換成RDD,然後提交到叢集執行,執行效率非常快
  2. Spark SQL應用場景
    1. ETL:
      1. Extract抽取
        1. 資料來源:HDFS、S3、本地、關係資料庫(Oracle、MySQL)、NOSQL(HBase、Cassandra)。。
        2. 資料型別:json、csv、xml。
      2. Transform清洗空值的處理、拆分資料、規範化數格式、資料替換。。。
      3. Load載入:儲存到各種資料來源中
    2. 分散式查詢:可以作為分散式sql查詢引擎,通過jdbc/odbc或指令對資料庫進行分散式查詢
    3. 結合spark streaming,處理實時資料流
    4. 結合MTLlib進行機器學習
  3. DataFrame
    1. 與RDD類似,也是一個分散式資料容器。
    2. DataFrame更像傳統資料庫的二維表格,除了資料以外,還記錄
      資料的結構資訊,即schema。
    3. 同時,與Hive類似,DataFrame也支援巢狀資料型別(struct、array和map)。
    4. 從API易用性的角度上 看,DataFrame API提供的是一套高層的關係操作,比函式式的RDD API要更加友好,門檻更低。由於與R和Pandas的DataFrame類似,Spark DataFrame很好地繼承了傳統單機資料分析的開發體驗​​​​​
  4. DateFrame兩種程式設計風格
    1. 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
    2. 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