一丶scala集合
collection
1 Scala List(列表) 元素以线性方式存储,集合中可以存放重复对象。
2 Scala Set(集合) 集合中的对象不按特定的方式排序,并且没有重复对象。
3 Scala Map(映射) KV对存储
4 Scala 元组 元组是不同类型的值的集合
5 Scala Option 表示有可能包含值的容器,也可能不包含值。
6 Scala Iterator迭代器 迭代器不是一个容器,更确切的说是逐一访问容器内
1.List
概念:类似数组,内容类型相同,通过泛型约束
不可变
有递归性质,可嵌套,数组不可以
• 常用操作
o head 返回列表第一个元素
o tail 返回一个列表,包含除了第一元素之外的其他元素
o isEmpty 在列表为空时返回true
o ::: 运算符或 List.::) 方法或 List.concat() 方法来连接两个或多个列表
o List.fill() 方法来创建一个指定重复数量的元素列表
o List.tabulate() 方法是通过给定的函数来创建列表。
o List.reverse 用于将列表的顺序反转
2.Set
概念:唯一性
分为可变不可变
默认不可变scala.collection.immutable.Set
可变去掉im
• 常用操作
o head 返回集合第一个元素
o tail 返回一个集合,包含除了第一元素之外的其他元素
o isEmpty 在集合为空时返回true
o 使用 ++ 运算符或 Set.++() 方法来连接两个集合
o 使用 Set.min 方法来查找集合中的最小元素,使用 Set.max 方法查找集合中的最大元素
o 使用 Set.& 方法或 Set.intersect 方法来查看两个集合的交集元素
3.Map
概念:k/v 结构 哈希表
所有值可通过键获取,键值是唯一的
可变不可变
导包与set类似,set换成map
• 常用操作
o keys:返回 Map 所有的键(key)
o values:返回 Map 所有的值(value)
o isEmpty:在 Map 为空时返回true
o 使用++运算符或Map.++()方法来连接两个Map,Map合并时会移除重复的key。
o 通过foreach循环输出Map中的keys和values:
o 使用Map.contains方法来查看Map中是否存在指定的Key
4.Option
概念:表示有可能包含值的容器,也可能不包含值。主要用来表示一个值是可选的。Option[T] 是一个类型为 T 的可选值的容器: 如果值存在, Option[T] 就是一个 Some[T] ,如果不存在, Option[T] 就是对象 None 。
5.Iterator
概念:访问集合的一种方法
基本操作:hasNext next
o 常用方法或属性
it.hasNext() 用于检测集合中是否还有元素。
it.next() 会返回迭代器的下一个元素,并且更新迭代器的状态
max:取得迭代器对应集合的最大值
min:取得迭代器对应集合的最小值
size/length:取得迭代器对应集合的长度
6.类和对象
• 概念说明
o 类和对象通用说明
类是对象的抽象,而对象是类的具体实例。
类是抽象的,不占用内存,而对象是具体的,占用存储空间。
类是用于创建对象的模板,它定义包括在特定类型的对象中的方法和变量。
o scala类和对象介绍
一个Scala源文件中可以有多个类。
类访问修饰符默认均是public的,并不需要声明
通过new来实例化类,生成相应的对象
类本身是不能作为程序主入口的,必须通过定义Object对象,该对象的main方法作为程序的主入口
• 类继承
o 概念说明
Scala继承一个基类跟Java很相似,但有若干不同之处。
重写一个非抽象方法必须使用override修饰符
只有主构造函数才可以往基类的构造函数里写参数
在子类中重写父类的抽象方法时,你不需要使用override关键字
单例模式
概念说明
static在scala中是没有的,不符合纯面向对象的模型。
scala中使用object关键字来解决单例模式问题。object与类的区别是object不能够带参数。
简单版单例模式
object ChineseSingleton {
var skinColor = “Yellow”
var country = “中国人”
}
object TestSingleton {
def main(args: Array[String]): Unit = {
println(ChineseSingleton.skinColor)
println(ChineseSingleton.country)
ChineseSingleton.skinColor = “黄色”;
println(ChineseSingleton.skinColor)
}
}
scala经典版单例模式
概念说明
伴生对象:除了定义的类之外,还要定义一个同名的 object 对象,当单例对象与某个类共享同一个名称时,他被称作是这个类的伴生对象:companion object
伴生类:该伴生对象对应的类,即为伴生类companion class
必须在同一个源文件里定义类和它的伴生对象
类和它的伴生对象可以互相访问其私有成员
二丶Spark core
介绍spark架构设计:
四个方面:角色,作用,关联,竞品分析
进程线程区别和联系
联系:均是计算机任务处理过程中的重要组成部分
均代表了一部分资源和计算能力的抽象
区别:进程由线程组成
进程是操作系统进行资源分配的最小单元
线程是操作系统任务执行,使用cpu的最小执行单元
流程:
client提交代码,driver生成上下文环境,把用户程序翻译成集群各种抽象
让后申请资源,集群资源管理器授权分配,分配工作节点,多线程进行
与MapReduce比优点:
Map中间结果写磁盘,Reduce写HDFS,多个MR之间通过HDFS交换数据
任务调度和启动开销大
Spark相关术语:
Rdd :弹性分布数据集,像MapReduceinputsplit 中block 分区
patition :划分数据的方式 ,一个patition交给一个task去处理
算子:(op)
函数操作认为是算子
spark算子:transformation 和 action 类 差不多80多个
transformation:算子,延迟计算,不是马上执行,用再触发
action: 立即触发提交作业,输出spark系统
窄依赖:父RDD每个分区 只被子RDD一个分区使用,即为11对应关系,
宽依赖:被多个使用。
application: 指spark 部署运行全部
driver:驱动程序,解耦,使用户与集群交互
cluster manager:资源管理器,调度管理者
workernode:启动进程,干活
executor:分配资源最小单位
task:分配到executor即被工作单元
shufflemaptask: 由transformation组成,目的是为resulttask做准备
reslttask:action操作触发,结果为最终结果
job作业:rdd 每个action生成job
job分解成stage计算,调度task机器执行节点,完成作业执行。
stage:阶段
job组成阶段
运行模式:
本地运行模式:
二.2
交互方式定位:
一个强大的交互式数据操作与分析的工具,提供一个简单的方式快速学习spark相关的API。
启动方式:
前置环境:已将spark-shell等交互式脚本已加入系统PATH变量,可在任意位置使用。
以本地2个线程来模拟运行spark相关操作,该数量一般与本机的cpu核数相一致为最佳spark-shell --master local[2]
相关参数:
1.参数列表获取方式:spark-shell --help
2.其参数非常多,但由于该方式主要是简单学习使用,故其参数使用极少,故不做详解。