使用Spark所有相关功能的入口是SQLContext类,或者它的子类。为了创建一个SQLContext基类,需要首先创建SparkContext。
使用Scala语言创建SQLContext的代码片段如下。
//已经存在的SparkContext
val sc:SparkContext
val sqlContext=new org.apache.spark.sql.SQLContext(sc)
//隐式地把RDD转换为DataFrame
import sqlContext.implicits._(www.xing528.com)
除了实例化SQLContext类,还可以创建一个HiveContext对象,它提供了包含完整SQLContext功能的一个超集,所能额外提供的附加功能包括使用更完整的HiveQL解析器编写查询语句、访问UDF(User Defined Function)、从Hive表中读取数据。HiveContext的使用并不要求已有的Hive设置,所有SQLContext能访问的数据源对于HiveContext都有效。
Spark SQL对HiveContext进行了单独打包,以避免在Apache Spark的默认版本中添加对Hive的依赖。如果这些依赖关系对应用程序没有影响,那么推荐在Apache Spark 1.3的发布版本中使用HiveContext。以后的版本将着力使SQLContext拥有HiveContext的功能。
用于解析查询语句SQL特定变体(Specific Varient)也可以选择使用spark.sql.dialect选项。可以利用SQLContext中setConf方法或在SQL中使用“SET key=value”命令,来改变这个参数。对于SQLContext,唯一可用的方言是“sql”,它采用了由Spark SQL提供的一个简单SQL解析器。对于HiveContext,默认使用“hiveql”进行查询等操作,“sql”也可以使用。由于HiveQL解析器更完整,所以建议大多数情况下使用“hiveql”。
在Spark中,DataFrame是一种以RDD为基础的分布式数据集,类似于传统数据库中的二维表格。DataFrame与RDD的主要区别在于,前者带有Schema元信息,即DataFrame所表示的二维表数据集的每一列都带有名称和类型。这使得Spark SQL得以洞察更多的结构信息,从而对藏于DataFrame背后的数据源以及作用于DataFrame之上的转换进行了针对性的优化,最终达到大幅提升运行时效率的目标。由于无从得知所存数据元素的具体内部结构,Spark Core只能在stage层面进行简单、通用的流水线优化。
有了SparkContext,可以在程序中根据数据源创建DataFrames。下面的【例4-1】包括创建并使用DataFrames结构化数据处理的例子。
【例4-1】DataFrame操作
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。