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表中的数据进行操作。


你可能感兴趣的:(Spark Sql,Dataframe和数据集指南)