spark2.2 SparkSession思考与总结1
问题导读 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
[Scala] 纯文本查看 复制代码
?
val sc=spark.sparkContext
[Scala] 纯文本查看 复制代码
?
sc.makeRDD(List(1,2,3,4,5))
[Scala] 纯文本查看 复制代码
?
val rddlist=sc.makeRDD(List(1,2,3,4,5))
[Scala] 纯文本查看 复制代码
?
val rl=rddlist.map(x=>x*x)
[Scala] 纯文本查看 复制代码
?
println(rl.collect.mkString(","))
1,4,9,16,25
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的实例化,我们则更加容易理解
[Scala] 纯文本查看 复制代码
?
SparkSession.builder
.master("local")
.appName("Word Count")
.config("spark.some.config.option", "some-value")
.getOrCreate()
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 七、玩转Git三剑客-使用GitHub进行团队协作
- 关于mysql的join
- 微信公众号接入智能聊天机器人
- SAP UI5 Diagnostics工具里一个使用面向切片编程(AOP)的一个例子
- SAP CDS view自学教程之九:cube view和query view的实现原理
- 一点多发FTP客户端设计
- VS2017中使用CppSQLite报出编译器错误C2440
- Windows 必知命令
- MATLAB批量读取一个文件夹下的图片
- python next()迭代器完成会引发StopIteration异常
- 没想到,Git居然有3种“后悔药”!
- JetCache埋点的骚操作,不服不行啊
- StringBuider 在什么条件下、如何使用效率更高?
- SpringCache与redis集成,优雅的缓存解决方案
- 理解一下5种IO模型、阻塞IO和非阻塞IO、同步IO和异步IO