标签:
class HiScala{
private var name="Spark"
def sayName(){println(name)}
def getName=name
}
val scal=new HiScala 还有其他形式
scal.sayName 同 scal.sayName()
class HiScala{
var name="Spark"
def sayName(){println(name)}
def getName=name
}
name没有private时,直接scal.name即可调用,但是实际是自动生成了getName和sayName函数,如已的存在则调用现存的
class Person{
private var myName="Spark"
def name = this.myName
def name_=(newName:String){
myName=newName
println("Hi:"+myName)
}
}
var rocky=new Person
rocky.name 输出"Spark"
rocky.name="Hp"
这里复写了getName和sayName
class Person{
private var myName="Spark"
def name = this.myName
def name_=(newName:String){ ---这里注意等号前后没有空格
myName=newName
println("Hi:"+myName)
}
def talk(p:Person){
println("hi "+p.name)
}
}
val p1=new Person
val p2=new Person
p1.talk(p2) 这里可正常调用
当然把private var myName="Spark" 换成private[this] var myName="Spark" 时就不可访问,这里private[this]指该变量变成包私有,这种用法很常用
下面讲构造函数
class Person{
var name="Spark"
var age=10
def this(name:String){
this()
this.name=name
}
def this(name:String,age:Int){
this(name)
this.age=age
}
}
与类名放置一起的是默认构造器,类中未放置到函数中的代码在执行构造函数时同时也会执行
Scala中类对象中不可有静态变量和静态方法,但是提供了“伴侣对象”的功能:在和类的同一个文件中定义同名的Object对象:(须在同一文件中;main方法定义在Object对象中)
object Person{
println("Scala")
var salary=0.0
def getSalary=salary
}
属性和类没有
fnall ??
override 子类复写父类的方法
抽象类
abstract class 接口
extends类继承
with 来继承 trait 接口
类继承和JAVA继承规则一样
工厂模式,单例模式?
作业:分析Spark核心类:SparkContent,RDD,读懂70%代码并提交weibo,自己的感受写好博客
3980 IMF 注册DT大数据梦工厂_阿文
SparkContext.scala 源码初学
入口类SparkContext,用来连接Spark集群、创建RDD,累积量和广播量等,负责向调用这提供Spark的各种功能。
默认构造函数为SparkConf对象,继承Logging 和ExecutorAllocationClient接口,实现了执行、记录结果、停止的接口方法,跟Java的接口interface很像,但是interface声明函数,但不实现,trait可以实现函数。
定义assertNotStopped 状态判断方法等
object SparkContext定义了伴生对象,在第一次被访问的时候才会被实例化,定义了静态成员和函数,如判断上下文状态,启动调度程序等
SparkContext 只能创建一个
SparkDeploySchedulerBackend的start函数,会启动一个Client对象,连接到Spark集群
textFile调用hadoopFile函数,返回一个RDD结构,然后把它做map,返回另外一个RDD结构
RDD.scala 源码初学
abstract class RDD 这是个抽象类,抽象类可以定义一些方法,但是不需要实现它们,继承的子类必须实现
每一个RDD都会有5个特征:
1、有一个分片列表。就是能被切分,和hadoop一样的,能够切分的数据才能并行计算。
2、有一个函数计算每一个分片,这里指的是下面会提到的compute函数。
3、对其他的RDD的依赖列表,依赖还具体分为宽依赖和窄依赖,但并不是所有的RDD都有依赖。
4、可选:key-value型的RDD是根据哈希来分区的,类似于mapreduce当中的Paritioner接口,控制key分到哪个reduce。
5、可选:每一个分片的优先计算位置(preferred locations),比如HDFS的block的所在位置应该是优先计算的位置。
def compute 对一个分片进行计算,得出一个可遍历结果
protected def getPartitions 返回当前RDD分片集合
getPartitions返回的是一系列partitions的集合
protected def getDependencies 计算RDD对父RDD的依赖
标签:
原文地址:http://www.cnblogs.com/jackie-fan/p/5107869.html