第8课:零基础实战Scala最常用数据结构Map和Tuple及Spark源码鉴赏
2016-09-19 17:41
471 查看
本课内容
1.Map和Tuple在Spark源码中的鉴赏
2.Map和Tuple代码操作实战
------------------------------------------------------------------------------------------------------------------------
/**
* Scala中最常见的两种数据结构:Map 和 Tuple
*
* Map初步感受就是key,value方式,key即是值的索引,排列非常规按照Hash的方式,
* 不是说插入了3个元素后第4个就在第3个后面。它可能第4个元素就在第2个后面(因为hashcode排在第2后面)
*
* 为什么说Map的key,value类型非常重要:最原始,最基础,最常用的数据结构。map中的key就是内容
* value的名字,如有有海量的数据,基于map检索速度非常快(数组则非常慢,尤其是修改的时候),从计算机
* 运行的效率来讲,我们也需要这种数据结构
*
* Tuple是Scala相比JAVA中特有的一种数据结构,前面无论谈什么数据结构(Map,数组,list)这些都有
* 具体的数据类型,但在现实社会中我们要表达一种观点,这个观点就是有不同的数据类类型放在一个集合里面。
*
* Array数组它的类型必须是一致的,要么是这个类型或者这个类型的子类型实例。而Tuple是不拘一格的,非常大
* 的跃进。
*
* 1.默认情况下Map构造的是不可变的集合,里面的内容不可修改,一旦修改就变成新的Map,原有的Map内容保持不变
* 2.Map的实例是调用工厂模式apply来构造Map实例,而需要注意的是Map是接口,在apply中使用了具体的实现
* 3.如果想直接new出Map实例,则需要使用HashMap等具体的Map子类
* 4.查询一个Map中的值一定是采用getOrElse的语法的,一方面是在key不存在的情况下不报异常,另外还有一个
* 神奇的作用就是提供默认值,而关于默认值提供在实际开发中至关重要,在Spark中很多默认的配置都是通过getOrElse
* 的方式来实现的
*
* 5.使用SortedMap可以得到排序的Map集合
* 6.LinkedHashMap可以记住插入的数据的顺序,
*
* 7.Tuple中可以有很多不同的数据("zhangs","male",30)
* 8.在企业级实际开发大数据的时候一定会反复的使用Tuple来表达数据结构,以及使用Tuple来处理业务逻辑
* 9.Tuple的另外一个非常重要的使用时作为函数的返回值,在Tuple中返回若干个值,以SparkContext源码为例来说明
* // Create and start the scheduler
* val (sched,ts) = SparkContext.createTaskScheduler(this,master)
* _schedulerBackend = sched
* _taskScheduler = ts
*/
object C8 {
def main(args: Array[String]): Unit = {
//调用工厂方法模式的apply来构造Map实例,而需要注意的是Map是接口
//在apply中使用了具体的实现
val bigDatas = Map("Spark"->6,"Hadoop"->11)
val persons = Map(("zhangs",11),("lisi",20))
//bigDatas("Spark") = 10 //直接构造的Map是不可变的
val programingLanguage = scala.collection.mutable.Map("Scalc"->13,"Java"->23)
programingLanguage("Scala") = 15
for((name,age) <- programingLanguage){
println(name + ":" + age)
}
//查询一个不存在的KEY,java返回null,而scala则会报出异常:java.util.NoSuchElementException: key not found
//不能使用这种方式,应采用getOrElse
//println( programingLanguage("Python"))
println( programingLanguage.getOrElse("Python", "zhangs"))
val personsInfomation = new scala.collection.mutable.HashMap[String,Int]
personsInfomation += ("Scalc"->13,"Java"->23) //增加元素
personsInfomation -= ("Java") //移除元素,只需要key
for((name,age) <- personsInfomation){
println(name + ":" + age)
}
//只循环出key
for(key <- personsInfomation.keySet){
println(key)
}
//只循环出value
for(value <- personsInfomation.values){
println(value)
}
//原有的Map遍历成一个新的Map,交换key和value
var result = for((name,age) <- personsInfomation) yield (age,name)
for((name,age) <- result){
println(name + ":" + age)
}
//排序
val sorPer = scala.collection.immutable.SortedMap(("zhangs",11),("lisi",20),("wangwu",30))
for((name,age) <- sorPer){
println(name + ":" + age)
}
//LinkedHashMap,打印时根据所填入值的顺序显示
//Tuple,例如描述一个人的信息
val information = ("zhangs","male",30)
println(information._3) //输出30
}
1.Map和Tuple在Spark源码中的鉴赏
2.Map和Tuple代码操作实战
------------------------------------------------------------------------------------------------------------------------
/**
* Scala中最常见的两种数据结构:Map 和 Tuple
*
* Map初步感受就是key,value方式,key即是值的索引,排列非常规按照Hash的方式,
* 不是说插入了3个元素后第4个就在第3个后面。它可能第4个元素就在第2个后面(因为hashcode排在第2后面)
*
* 为什么说Map的key,value类型非常重要:最原始,最基础,最常用的数据结构。map中的key就是内容
* value的名字,如有有海量的数据,基于map检索速度非常快(数组则非常慢,尤其是修改的时候),从计算机
* 运行的效率来讲,我们也需要这种数据结构
*
* Tuple是Scala相比JAVA中特有的一种数据结构,前面无论谈什么数据结构(Map,数组,list)这些都有
* 具体的数据类型,但在现实社会中我们要表达一种观点,这个观点就是有不同的数据类类型放在一个集合里面。
*
* Array数组它的类型必须是一致的,要么是这个类型或者这个类型的子类型实例。而Tuple是不拘一格的,非常大
* 的跃进。
*
* 1.默认情况下Map构造的是不可变的集合,里面的内容不可修改,一旦修改就变成新的Map,原有的Map内容保持不变
* 2.Map的实例是调用工厂模式apply来构造Map实例,而需要注意的是Map是接口,在apply中使用了具体的实现
* 3.如果想直接new出Map实例,则需要使用HashMap等具体的Map子类
* 4.查询一个Map中的值一定是采用getOrElse的语法的,一方面是在key不存在的情况下不报异常,另外还有一个
* 神奇的作用就是提供默认值,而关于默认值提供在实际开发中至关重要,在Spark中很多默认的配置都是通过getOrElse
* 的方式来实现的
*
* 5.使用SortedMap可以得到排序的Map集合
* 6.LinkedHashMap可以记住插入的数据的顺序,
*
* 7.Tuple中可以有很多不同的数据("zhangs","male",30)
* 8.在企业级实际开发大数据的时候一定会反复的使用Tuple来表达数据结构,以及使用Tuple来处理业务逻辑
* 9.Tuple的另外一个非常重要的使用时作为函数的返回值,在Tuple中返回若干个值,以SparkContext源码为例来说明
* // Create and start the scheduler
* val (sched,ts) = SparkContext.createTaskScheduler(this,master)
* _schedulerBackend = sched
* _taskScheduler = ts
*/
object C8 {
def main(args: Array[String]): Unit = {
//调用工厂方法模式的apply来构造Map实例,而需要注意的是Map是接口
//在apply中使用了具体的实现
val bigDatas = Map("Spark"->6,"Hadoop"->11)
val persons = Map(("zhangs",11),("lisi",20))
//bigDatas("Spark") = 10 //直接构造的Map是不可变的
val programingLanguage = scala.collection.mutable.Map("Scalc"->13,"Java"->23)
programingLanguage("Scala") = 15
for((name,age) <- programingLanguage){
println(name + ":" + age)
}
//查询一个不存在的KEY,java返回null,而scala则会报出异常:java.util.NoSuchElementException: key not found
//不能使用这种方式,应采用getOrElse
//println( programingLanguage("Python"))
println( programingLanguage.getOrElse("Python", "zhangs"))
val personsInfomation = new scala.collection.mutable.HashMap[String,Int]
personsInfomation += ("Scalc"->13,"Java"->23) //增加元素
personsInfomation -= ("Java") //移除元素,只需要key
for((name,age) <- personsInfomation){
println(name + ":" + age)
}
//只循环出key
for(key <- personsInfomation.keySet){
println(key)
}
//只循环出value
for(value <- personsInfomation.values){
println(value)
}
//原有的Map遍历成一个新的Map,交换key和value
var result = for((name,age) <- personsInfomation) yield (age,name)
for((name,age) <- result){
println(name + ":" + age)
}
//排序
val sorPer = scala.collection.immutable.SortedMap(("zhangs",11),("lisi",20),("wangwu",30))
for((name,age) <- sorPer){
println(name + ":" + age)
}
//LinkedHashMap,打印时根据所填入值的顺序显示
//Tuple,例如描述一个人的信息
val information = ("zhangs","male",30)
println(information._3) //输出30
}
相关文章推荐
- 大数据Spark “蘑菇云”行动前传第8课:零基础实战Scala最常用数据结构Map和Tuple及Spark源码解析
- Scala implicits编程彻底实战及Spark源码鉴赏
- 大数据Spark“蘑菇云”行动-第14课Scala集合上的函数式编程实战及Spark源码鉴赏
- Scala中最常用数据结构Map和Tuple
- Scala学习笔记09【Map、Tuple、Zip常用操作实战】
- 第10课:Scala继承彻底实战和Spark源码鉴赏
- 第16课:Scala implicits编程彻底实战及Spark源码鉴赏
- 大数据Spark “蘑菇云”行动前传第7课:零基础实战Scala面向对象编程及Spark源码解析
- 大数据Spark “蘑菇云”行动前传第4课:零基础彻底实战Scala控制结构及Spark源码解析
- 第6课 :零基础实战Scala集合操作及Spark源码解析
- 大数据Spark “蘑菇云”行动前传第14课Scala集合上的函数式编程实战及Spark源码鉴赏
- 大数据Spark“蘑菇云”行动-第11课:Scala面向接口彻底实战和Spark源码鉴赏
- 第4课:零基础彻底实战Scala控制结构及Spark源码解析
- 大数据Spark “蘑菇云”行动前传第20课:Scala提取器、注解深度实战详解及Spark源码鉴赏大数据Spark “蘑菇云”行动前传第20课:Scala提取器、注解深度实战详解及Spark源码鉴
- Scala继承彻底实战和Spark源码鉴赏
- Scala最常用数据结构Map和Tuple解析
- 第7课:零基础实战Scala面向对象编程及Spark源码解析
- 大数据Spark “蘑菇云”行动前传第22课:Scala集合和高级函数操作实战及Spark源码鉴赏.
- 大数据Spark “蘑菇云”行动前传第16课:Scala implicits编程彻底实战及Spark源码鉴赏
- 大数据Spark “蘑菇云”行动前传第13课Scala模式匹配实战和Spark源码鉴赏