sparksession相关概念

在2.0版本之前,与Spark交互之前必须先创建SparkConf和SparkContext,代码如下: 
val sparkConf = new SparkConf().setAppName("SparkSessionZipsExample").setMaster("local")  
val sc = new SparkContext(sparkConf).set("spark.some.config.option", "some-value")  
val sqlContext = new org.apache.spark.sql.SQLContext(sc)
任何Spark程序都是SparkContext开始的,SparkContext的初始化需要一个SparkConf对象,SparkConf包含了Spark集群配置的各种参数。
初始化后,就可以使用SparkContext对象所包含的各种方法来创建和操作RDD和共享变量。


在Spark的早期版本,sparkContext是进入Spark的切入点。我们都知道RDD是Spark中重要的API,然而它的创建和操作得使用sparkContext提供的API;对于RDD之外的其他东西,我们需要使用其他的Context。比如对于流处理来说,我们得使用StreamingContext;对于SQL得使用sqlContext;而对于hive得使用HiveContext。然而DataSet和Dataframe提供的API逐渐称为新的标准API,我们需要一个切入点来构建它们,所以在 Spark 2.0中我们引入了一个新的切入点(entry point):SparkSession
  
然而在Spark 2.0中,SparkSession为用户提供了一个统一的切入点来使用Spark的各项功能,我们可以通过SparkSession来实现同样的功能,而不需要显式地创建SparkConf, SparkContext 以及 SQLContext,因为这些对象已经封装在SparkSession中。使用生成器的设计模式(builder design pattern),如果我们没有创建SparkSession对象,则会实例化出一个新的SparkSession对象及其相关的上下文。最重要的是,它减少了用户需要了解的一些概念,使得我们可以很容易地与Spark交互。
SparkSession实质上是SQLContext和HiveContext的组合(未来可能还会加上StreamingContext),所以在SQLContext和HiveContext上可用的API在SparkSession上同样是可以使用的。SparkSession内部封装了sparkContext,所以计算实际上是由sparkContext完成的。


SparkSession 是 Spark SQL 的入口, SparkSession 合并了 SQLContext 和 HiveContext。
val spark = SparkSession  
   .builder()   //a builder to get or create a SparkSession instance
   .master("local")  
   .appName("SparkSessionZipsExample")   //设置 application 的名字
   .config("spark.sql.warehouse.dir", warehouseLocation)   //设置各种配置
   .enableHiveSupport()    //增加支持 hive Support
   .getOrCreate()  //获取或者新建一个 sparkSession
//setMaster主要是连接主节点,如果参数是"local",则在本地用单线程运行spark,如果是 local[4],则在本地用4核运行,如果设置为spark://master:7077,就是作为单节点运行

一旦我们创建好了SparkSession,我们就可以配置Spark运行相关属性。比如
spark.conf.set("spark.sql.shuffle.partitions", 6)  
spark.conf.set("spark.executor.memory", "2g")  

cache和persist的区别:cache只有一个默认的缓存级别MEMORY_ONLY ,而persist可以根据情况设置其它的缓存级别。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值