第2课 Scala面向对象彻底精通及Spark源码SparkContext,RDD阅读总结

第2课:Scala面向对象彻底精通及Spark源码阅读
本期内容:
1 Scala中的类、object实战详解
2 Scala中的抽象类、接口实战详解
3 综合案例及Spark源码解析

一:定义类
class HiScala{
private var name = "Spark"

def sayName(){
println(name)
}
def getName = name
}

Scala中,变量与类中的方法是同等级的,可以直接赋值给方法。

scala中的get与set与Java中的get,set有很大的差异:
在Scala中,如果程序中给变量或方法前面定义了private,那么scala会给这个变量或方法自动生成private的get和set方
法,如果程序中没有给变量或方法前面定义了private,那么scala会给这个变量或方法自动生成public的get和set方法。

创建类的对象
val scal = new Hiscala
scal.sayName()
scal.sayName//如果不传参时,等同上面
scal.getName

var name="Spark" //如果不加private,默认会生成一个public的get和set方法,外部可以调

private[this] 对类对象较深层次的访问控制

类的构造器
注意:所有重载的构造器,都必须首先调用默认的构造器,或者说调用其它重载的构造器

类的构造器:重载
def this(name:String)
{
this() //调用默认的构造器
this.name=name
}

def this(name:String,age:Int){
this(name) //调用其它重载的构造器
this.age=age
}

伴生对象 object:
scala程序中,定义完类之后,一般会定义一个同名的object,它用于存放静态的成员或者方法,当我们第一次调
用这个伴生对象时,它会执行object的构造方法,只是这个构造方法是不接受参数的,而且这个构造方法只会调用一次,以后不会
在调用。
定义:object Person{
println("Scala")
val salary=0.0
def getSalary=salary
}

伴生对象的apply方法:它就是当前类的对象的工厂方法,它可以控制对象的生成。

scala不支持多重继成

trait:工具方法的一个容器

SparkContext类源码解析:

  SparkContex位于项目的源码路径\spark-master\core\src\main\scala\org\apache\spark\SparkContext.scala中,源文件包含SparkContextClasss声明和其伴生对象SparkContextObject

   class SparkContext extends了Logging。Logging是一个trait,它是用于存放工具方法的一个容器,trait封装方法和字段。把trait混入到类中,就可以重用它们。一个类,可以继承任意多个trait,多个trait继承采用with来实现,可以将trait视为Java的接口interface,跟interface非常相似。唯一的差别在于,interface声明函数,但不实现它们,trait可以实现函数。

trait跟class的差别在于,trait没有任何类参数,trait调用的方法是动态绑定的。

class SparkContext类中有多个重载的构造方法:
如下:
def this(master: String, appName: String, conf: SparkConf) =
this(SparkContext.updatedConf(conf, master, appName))

@deprecated("Passing in preferred locations has no effect at all, see SPARK-10921", "1.6.0")
def this(
master: String,
appName: String,
sparkHome: String = null,
jars: Seq[String] = Nil,
environment: Map[String, String] = Map(),
preferredNodeLocationData: Map[String, Set[SplitInfo]] = Map()) =
{
this(SparkContext.updatedConf(new SparkConf(), master, appName, sparkHome, jars, environment))
if (preferredNodeLocationData.nonEmpty) {
logWarning("Passing in preferred locations has no effect at all, see SPARK-8949")
}
}

val startTime = System.currentTimeMillis()
startTime没有加上private,scala编译时,startTime这个变量是私有的,但会自动的生成它的public的get和set方法,供外部对象调用。

private[spark] val stopped: AtomicBoolean = new AtomicBoolean(false)
private[class_name] 指定可以访问该字段的类,访问的级别较严,在编译时,会自动的生成get和set方法,class_name必须是当前定义的类或类的外部类。

private def assertNotStopped(): Unit = {}
这个方法它是一个过程,因为返回值是Unit,没有结果返回。

RDD类源码解析:
class RDD它是个抽象类,

private[spark] def conf = sc.conf
private[class_name] 指定可以访问该字段的类,访问的级别较严,在编译时,会自动的生成get和set方法,class_name必须是当前定义的类或类的外部类。

class RDD类中有很多加了final修饰符的方法,表示:此方法或属性,子类继承此类时不可被覆写,如下:
final def dependencies: Seq[Dependency[_]] = {
checkpointRDD.map(r => List(new OneToOneDependency(r))).getOrElse {
if (dependencies_ == null) {
dependencies_ = getDependencies
}
dependencies_
}
}

final def partitions: Array[Partition] = {
checkpointRDD.map(_.partitions).getOrElse {
if (partitions_ == null) {
partitions_ = getPartitions
}
partitions_
}
}

final def getNumPartitions: Int = partitions.length

时间: 2024-08-07 05:37:54

第2课 Scala面向对象彻底精通及Spark源码SparkContext,RDD阅读总结的相关文章

第2集:Scala面向对象彻底精通及Spark源码阅读

定义类class HiScala {private var name = "Spark"def sayName(){println(name)}def getName=name} 实例化类scala> val scal = new HiScalascal: HiScala = [email protected] 调用类的方法scala> scal.sayName()Spark scala> scal.getNameres6: String = Spark class

大数据Spark蘑菇云前传第15课:Scala类型参数编程实战及Spark源码鉴赏(学习笔记)

前传第15课:Scala类型参数编程实战及Spark源码鉴赏 本課課程: Spark源码中的Scala类型系統的使用 Scala类型系統编程操作实战 Spark源码中的Scala类型系統的使用 classOf[RDD[_]] 這個也是类型系統 這里的意思是說 B 這種類型必需至少是 A 這樣類型 Ordering Scala类型系統编程操作实战 作為類型系統最大的就可以對類型進行限制,在Scala 中的類型系統,他本身也作為對象.e.g. 我們可以建立 Person 這個類,現在可以建立一個什麼

第3课 Scala函数式编程彻底精通及Spark源码阅读笔记

本课内容: 1:scala中函数式编程彻底详解 2:Spark源码中的scala函数式编程 3:案例和作业 函数式编程开始: def fun1(name: String){ println(name) } //将函数名赋值给一个变量,那么这个变量就是一个函数了. val fun1_v = fun1_ 访问 fun1_v("Scala") 结果:Scala 匿名函数:参数名称用 => 指向函数体 val fun2=(content: String) => println(co

Scala模式匹配、类型系统与Spark源码阅读

java switch-case(对值) scala不仅对值,而且可以对类型,集合(map,list元数据匹配),object,class scala大量使用模式匹配(match case) Scala的模式匹配,与Java的switch case的区别: 1.不仅可以匹配值,可以匹配类型 2.可以匹配数组的集合 相同数组.长度相同的数组.以某个元素开头的数组 对于长度相同的数组,会进行自动变量赋值 3.匹配class - 样例类case class 类似于Java里的Bean 一般都不可改变,

大数据Spark蘑菇云前传第16课:Scala implicits编程彻底实战及Spark源码鉴赏(学习笔记)

本課課程: Spark源码中的Scala的 implicit 的使用 Scala的 implicit 编程操作实战 Scala的 implicit 企业级最佳实践 Spark源码中的Scala的 implicit 的使用 這個東西意義非常重大,RDD 本身沒有所謂的 Key, Value,只不過是自己本身解讀的時候把它變成 Key Value 的方法去解讀,RDD 本身就是一個 Record. RDD 本身沒有 reduceByKey,它是用了隐式转换,转换了PairRDDPartition 類

Spark源码定制第一课:通过案例对SparkStreaming透彻理解三板斧之一

第一课:通过案例对SparkStreaming透彻理解三板斧之一:解密SparkStreaming另类实验及SparkStreaming本质解析 本期导读: 1 Spark源码定制选择从SparkStreaming入手: 2 Spark Streaming另类在线实验: 3 瞬间理解SparkStreaming本质. 1.    从Spark Streaming入手开始Spark源码版本定制之路 1.1           从Spark Streaming入手Spark源码版本定制之路的理由 从

Spark源码的角度思考Scala中的模式匹配

学习了从Spark源码的角度思考Scala中的模式匹配,如case class应用,伴生对象中用apply,所以没有new class,直接进行模式匹配,例子如下 Case class RegisterWorker( Id: string, Host: string, Port: int, Cores:int, Memory:int, webUiPort:int, publicAddress:string, Extend DeployMessage{ Utils.checkHost(host,”

第66讲:Scala并发编程实战初体验及其在Spark源码中的应用解析

王家林亲授<DT大数据梦工厂>大数据实战视频“Scala深入浅出实战经典”视频.音频和PPT下载!第66讲:Scala并发编程实战初体验及其在Spark源码中的应用解析百度云:http://pan.baidu.com/s/1pJ5jzHx腾讯微云:http://url.cn/aSawrm360云盘:http://yunpan.cn/cctL3QYACaVNa  访问密码 c0fb 信息来源于 DT大数据梦工厂微信公众账号:DT_Spark

Scala深入浅出实战经典《第83讲:Scala中List的实现内幕源码揭秘》笔记

终于从暑假回到正常的日子了~虽然开始学习<scala深入浅出实战经典>这门课程有些晚了,但是不管如何既然开始了,坚持下去才是重点.下面言归正传. 第83讲:Scala中List的实现内幕源码揭秘 Goal:List实现关键源码分析 Gains: 1)List中的诸多方法其实还是采用ListBuffer来实现的,而后ListBuffer利用toList返回不可变的List. 2)采用ListBuffer,效率较高:而toList方法返回List,也只是耗常量时间,并不会很大程度地影响性能. Q: