出发点SQLContext
在Spark SQL中,SQLContext类是所有函数功能的入口点,要创建一个基本的SQLContext,你只需要一个SparkContext。
val sc: SparkContext // An existing SparkContext.
val sqlContext = new org.apache.spark.sql.SQLContext(sc)
// this is used to implicitly convert an RDD to a DataFrame.
import sqlContext.implicits._
除了基本的SQLContext,你也可以创建HiveContext,通过基本的SQLContext所提供了一个功能的超集。还包括了通过完整的HiveQL解析可以写查询的特征,访问Hive UDFs,和从Hive表中读取数据的能力。要使用HiveContext,你不需要对Hive进行设置,所有支持SQLContext的数据源,对HiveContext也是支持的。HiveContext被单独打包,以避免在默认的Spark构建的时候包括所有的Hive依赖。如果这些依赖对于你的应用程序没有问题,对于Spark的1.3的发布版本,推荐使用HiveContext。未来的发布将会集中于让SQLContext达到与HiveContext同等的特征。
被用于解析查询的SQL的特定的变体也能通过使用spark.sql.dialect
选项选择。这个参数能够使用SQLContext的setConf
方法或在SQL中使用一个SET key=value
命令被改变。对于一个SQLContext,仅有的方言(dialect)是sql,它使用一个由Spark SQL提供的简单的SQL解析器。在一个HiveContext中,默认的是“hiveql",尽管“sql"也是被支持的。因为HiveQL解析器更加完整,对于大多数据使用情况,推荐使用HiveQL。