第2课 Scala面向对象彻底精通及Spark源码SparkContext,RDD阅读总结
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了第2课 Scala面向对象彻底精通及Spark源码SparkContext,RDD阅读总结,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3169字,纯文字阅读大概需要5分钟。
内容图文
![第2课 Scala面向对象彻底精通及Spark源码SparkContext,RDD阅读总结](/upload/InfoBanner/zyjiaocheng/1327/0683f4f85b154b4193c86d61238442ff.jpg)
第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
原文:http://www.cnblogs.com/supersom/p/5096645.html
内容总结
以上是互联网集市为您收集整理的第2课 Scala面向对象彻底精通及Spark源码SparkContext,RDD阅读总结全部内容,希望文章能够帮你解决第2课 Scala面向对象彻底精通及Spark源码SparkContext,RDD阅读总结所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。