转载:https://www.cnblogs.com/lillcol/p/11233456.html
SparkSession是Spark 2.0引如的新概念。SparkSession为用户提供了统一的切入点,来让用户学习spark的各项功能。 在spark的早期版本中,SparkContext是spark的主要切入点,由于RDD是主要的API,我们通过sparkcontext来创建和操作RDD。对于每个其他的API,我们需要使用不同的context。例如,对于Streming,我们需要使用StreamingContext;对于sql,使用sqlContext;对于Hive,使用hiveContext。但是随着DataSet和DataFrame的API逐渐成为标准的API,就需要为他们建立接入点。所以在spark2.0中,引入SparkSession作为DataSet和DataFrame API的切入点,SparkSession封装了SparkConf、SparkContext和SQLContext HiveContext。为了向后兼容,SQLContext和HiveContext也被保存下来。 SparkSession实质上是SQLContext和HiveContext的组合(未来可能还会加上StreamingContext),所以在SQLContext和HiveContext上可用的API在SparkSession上同样是可以使用的。SparkSession内部封装了sparkContext,所以计算实际上是由sparkContext完成的。
驱动程序使用SparkContext与集群进行连接和通信,它可以帮助执行Spark任务,并与资源管理器(如YARN 或Mesos)进行协调。 使用SparkContext,可以访问其他上下文,比如SQLContext和HiveContext。 使用SparkContext,我们可以为Spark作业设置配置参数。 如果您在spark-shell中,那么SparkContext已经为您提供了,并被分配给变量sc。 如果还没有SparkContext,可以先创建一个SparkConf。
//set up the spark configuration val sparkConf = new SparkConf().setAppName("hirw").setMaster("yarn") //get SparkContext using the SparkConf val sc = new SparkContext(sparkConf)SQLContext是通往SparkSQL的入口。下面是如何使用SparkContext创建SQLContext。
// sc is an existing SparkContext. val sqlContext = new org.apache.spark.sql.SQLContext(sc)一旦有了SQLContext,就可以开始处理DataFrame、DataSet等。
HiveContext是通往hive入口。 HiveContext具有SQLContext的所有功能。 实际上,如果查看API文档,就会发现HiveContext扩展了SQLContext,这意味着它支持SQLContext支持的功能以及更多(Hive特定的功能)
public class HiveContext extends SQLContext implements Logging下面是如何使用SparkContext获得HiveContext
// sc is an existing SparkContext. val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc)SparkSession是在Spark 2.0中引入的, 它使开发人员可以轻松地使用它,这样我们就不用担心不同的上下文, 并简化了对不同上下文的访问。通过访问SparkSession,我们可以自动访问SparkContext。
下面是如何创建一个SparkSession
val spark = SparkSession .builder() .appName("hirw-test") .config("spark.some.config.option", "some-value") .getOrCreate()SparkSession现在是Spark的新入口点,它替换了旧的SQLContext和HiveContext。注意,保留旧的SQLContext和HiveContext是为了向后兼容。
一旦我们访问了SparkSession,我们就可以开始使用DataFrame和Dataset了。
下面是我们如何使用Hive支持创建SparkSession。
val spark = SparkSession .builder() .appName("hirw-hive-test") .config("spark.sql.warehouse.dir", warehouseLocation) .enableHiveSupport() .getOrCreate()因此,如果您正在使用Spark 2.0或更高版本,建议使用SparkSession。