从第26课开始,我们开始学习Scala的高级进阶,本课是Scala高级进阶第一课。
Scala的核心力量是什么?
1、自上而下和自下而上完美结合。
自上而下(对象):面向对象编程,软件系统由一个个对象组成,对象之间通过消息传递来完成。
自下而上(动作):函数式编程,强调功能的具体实现;
Scala把两者完美结合,核心是隐式转换、函数式编程。
2、数据状态不可变性
分布式多线程编程,要求对象状态不可更改,这样就可以简化编程、提升效率、减少Bug、方便分布式并发。
多线程加锁的代价非常大,如果数据状态不可变性,读取数据就不需要加锁。
3、类型系统+隐式转换
(Scala高手必须掌握类型系统)
4、函数式编程
5、Scala基于JVM可以直接调用Java的所有库和框架的功能。
Scala黄金定律
定律1:状态不可变
定律2:优先考虑面向值的编程方式,和不变性结合,简化编程代码
示例:
scala> val result =if(true) "Scala" else "Java"
result: String = Scala
下面的示例代码是最常规的一直方式:
def process(code:Int):String = {
var result:String=""
code match {
case 0 => result="0"
case 1 => result="1"
case _ => result="1000"
}
result
}
接下来改造上面代码,采用面向值的方式,可以极大简化代码行数:
def process(code: Int): String = code match {
case 0 => "0"
case 1 => "1"
case _ => "1000"
}
面向值的编程,一般都是和不可变性在一起。
定律3:多步骤操作对象是采用this.type构造链式表达式。
示例代码如下:
textFile.flatMap(line => line.split(" ")).map(word => (word, 1))
定律4:使用Option(None和Some),使用None取代Null。
Option可以像普通集合一样进行map等操作,简化代码。
scala> val capitals = Map("France" -> "Paris", "Japan" -> "Tokyo")
capitals: scala.collection.immutable.Map[String,String] = Map(France -> Paris, Japan -> Tokyo)
scala> capitals.get( "France" )
res0: Option[String] = Some(Paris)
scala> capitals.get( "AAA" )
res1: Option[String] = None
定律5:使用伴生对象构造接口或者抽象类或者类的实例。
object Graph {
......
def apply[VD: ClassTag, ED: ClassTag](
vertices: RDD[(VertexId, VD)],
edges: RDD[Edge[ED]],
defaultVertexAttr: VD = null.asInstanceOf[VD],
edgeStorageLevel: StorageLevel = StorageLevel.MEMORY_ONLY,
vertexStorageLevel: StorageLevel = StorageLevel.MEMORY_ONLY): Graph[VD, ED] = {
GraphImpl(vertices, edges, defaultVertexAttr, edgeStorageLevel, vertexStorageLevel)
}
...
}
object GraphImpl {
/** Create a graph from edges, setting referenced vertices to `defaultVertexAttr`. */
def apply[VD: ClassTag, ED: ClassTag](
edges: RDD[Edge[ED]],
defaultVertexAttr: VD,
edgeStorageLevel: StorageLevel,
vertexStorageLevel: StorageLevel): GraphImpl[VD, ED] = {
fromEdgeRDD(EdgeRDD.fromEdges(edges), defaultVertexAttr, edgeStorageLevel, vertexStorageLevel)
}
}
本博声明:
博文内容源自DT大数据梦工厂大数据Spark“蘑菇云”前置课程。相关课程内容视频可以参考:
百度网盘链接:http://pan.baidu.com/s/1cFqjQu(如果链接失效或需要后续的更多资源,请联系QQ460507491或者微信号:DT1219477246 获取上述资料,或者直接拨打 18610086859咨询)。