1. 程式人生 > >Spark Sql,Dataframe和資料集指南

Spark Sql,Dataframe和資料集指南

概述

  Spark SQL是一個spark模組,主要用於結構化資料的處理。不像基礎的spark RDD的API那麼抽象,該介面能夠對資料和資料的計算提供更多的資訊。Spark SQL使用這些額外的資訊來增加額外的優化。有很多種方式來與Spark SQL互動,包括了SQL語句,DataFrame API和Datasets API,因此使用者可以輕鬆的在這些方式中來進行切換,從而讓使用更加方便。

  下面所有的例子都可以在spark-shell,pyspark shell或者sparkR shell中執行。

SQL

Spark SQL的一個功能就是執行常見的SQL指令或者HiveQL指令。spark sql可以從hive中讀取資料。對於如何配置這個功能,可以參考下面hive tables(http://spark.apache.org/docs/latest/sql-programming-guide.html#hive-tables)部分,當使用SQL來處理資料時,將會以DataFrame的形式返回資料。你也可以跟SQL互動通過使用命令列的形式或者JDBC或者ODBC,下面會講到。

DataFrames

一個DataFrame是一個分散式的資料集合,通過列的方式來組織資料。下面的圖很好的展示了dataframe和RDD的區別,dataframe中比RDD增加了schema資訊,可以對資料的列資訊進行描述,從而比RDD使用起來更加高效。


Datasets

一個Dataset是在spark1.6中一個新的實驗性的介面,旨在嘗試提供RDD的優勢,(強型別,能夠使用更強大的lambda函式)通過使用spark sql的優化後的執行引擎。一個Dataset可以通過JVM中的objects來進行組織,然後可以通過(map,flatMap,filter等)來進行轉化。

開始

出發點:SQLContext

下面的例子都是都是以java的方式來進行說明,其實由於scala也是執行在jvm中,因此在程式中有很多相似之處。

進入Spark SQL的入口函式就是SQLContext,就類似c++中的main函式,建立SQLContext的方式就是通過使用SparkContext

JavaSparkContext sc = ...;
SQLContext sqlContext = new org.apache.spark.sql.SQLContext(sc);

下面這條語句是從sparkcontext中new出一個sqlcontext,sqlcontext是sparkcontext的子方法。

除了基本的SQLContext外,也可以建立一個HiveContext,HiveContext是基礎的SQLContext功能的超集

,可以對hive表中的資料進行操作。除了可以查詢HiveQL外,還可以使用hive的hdfs,還可以從hive表中讀取資料。在使用HiveContext,你不用去安裝Hive的情況下同樣可以使用SQLContext。HiveContext是