分享

spark2:SparkSession思考与总结1

本帖最后由 pig2 于 2017-11-28 16:22 编辑
问题导读

1.你认为为何出现SparkSession?
2.SparkSession如何创建RDD?
3.SparkSession通过那个类来实例化?
4.bulider包含哪些函数?




为何出现SparkSession
对于spark1.x的版本,我们最常用的是rdd,如果我们想使用DataFrame,则需要通过rdd转换。随着dataframe和dataset使用的越来越多,所以spark就寻找了新的切入点--SparkSession。如果rdd使用SparkContext,DateFrame和DataSet使用SparkSession,然后还有SQLContext和HiveContext,想必太麻烦了。所以官网用SparkSession封装了SQLContext和HiveContext。然而在2.2版本中,StreamingContext还是单独存在的。所以我们在使用SparkStreaming,还必须使用StreamingContext来作为入口。

SparkSession如何创建RDD
这里如果你思考的话,可能会想,spark2是否还支持rdd。当然还是支持的。
这里以下面为例:
我们进入spark-shell,通过SparkSession获取sparkContext
[mw_shl_code=scala,true]val sc=spark.sparkContext
[/mw_shl_code]
获取sparkcontext.jpg
[mw_shl_code=scala,true]sc.makeRDD(List(1,2,3,4,5))[/mw_shl_code]
[mw_shl_code=scala,true]val rddlist=sc.makeRDD(List(1,2,3,4,5))[/mw_shl_code]
[mw_shl_code=scala,true]val rl=rddlist.map(x=>x*x)
[/mw_shl_code]
[mw_shl_code=scala,true]println(rl.collect.mkString(","))
1,4,9,16,25
[/mw_shl_code]
1.jpg

SparkSession如何实例化
通过静态类Builder来实例化。
Builder又有很多方法,包括:
1.appName函数
1.appName(String name)
用来设置应用程序名字,会显示在Spark web UI中
值类型:SparkSession.Builder

2.config函数
这里有很多重载函数。其实从这里我们可以看出重载函数,是针对不同的情况,使用不同的函数,但是他们的功能都是用来设置配置项的。
1.config(SparkConf conf)
根据给定的SparkConf设置配置选项列表。
2.config(String key, boolean value)
设置配置项,针对值为boolean的
3.config(String key, double value)
设置配置项,针对值为double的
4.config(String key, long value)
设置配置项,针对值为long 的
5.config(String key, String value)
设置配置项,针对值为String 的

值类型:SparkSession.Builder

3.enableHiveSupport函数
表示支持Hive,包括 链接持久化Hive metastore, 支持Hive serdes, 和Hive用户自定义函数
值类型:SparkSession.Builder

4.getOrCreate函数
getOrCreate()
获取已经得到的 SparkSession,或则如果不存在则创建一个新的基于builder选项的SparkSession
值类型:SparkSession

5.master函数
master(String master)
设置Spark master URL 连接,比如"local" 设置本地运行,"local[4]"本地运行4cores,或则"spark://master:7077"运行在spark standalone 集群。
值类型:SparkSession.Builder

6.withExtensions函数
withExtensions(scala.Function1<SparkSessionExtensions,scala.runtime.BoxedUnit> f)
这允许用户添加Analyzer rules, Optimizer rules, Planning Strategies 或则customized parser.这一函数我们是不常见的。
值类型:SparkSession.Builder

了解了上面函数,对于官网提供的SparkSession的实例化,我们则更加容易理解
[mw_shl_code=scala,true] SparkSession.builder
     .master("local")
     .appName("Word Count")
     .config("spark.some.config.option", "some-value")
     .getOrCreate()[/mw_shl_code]
对于上面你是否又发现一个问题?
SparkSession.builder.master("local").appName("Word Count") .config("spark.some.config.option", "some-value").getOrCreate()
一个类才能调用它自己的函数,builder包含了上面的函数,但是master函数并不包含appName,同理其它的也是。这个该如何解释?
这时候我们看到他们的值类型都为SparkSession.Builder,每调用一次,返回值都为SparkSession.Builder,那么SparkSession.Builder能调用自己的函数,是理所当然的。
这里参考官网spark2.2文档
后续有时间在更新

下一篇
spark2的SparkSession思考与总结2:SparkSession包含哪些函数
http://www.aboutyun.com/forum.php?mod=viewthread&tid=23407


本帖被以下淘专辑推荐:

已有(2)人评论

跳转到指定楼层
hutonm 发表于 2017-11-27 09:14:43
辛苦了, config配置项有没有详解。
回复

使用道具 举报

qcbb001 发表于 2017-11-27 10:26:21
hutonm 发表于 2017-11-27 09:14
辛苦了, config配置项有没有详解。

个人理解,应该是对config的个性定制。如果config文件中已经配置,程序中也配置了,这时候程序中的配置起作用。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条