大数据系列第二课:scala基础
2016-01-04 11:47
225 查看
第一部分总结
一:定义类
Scala中,变量与类中的方法是同等级的,可以直接赋值给方法。
scala中的get与set与Java中的get,set有很大的差异:
在Scala中,如果程序中给变量或方法前面定义了private,那么scala会给这个变量或方法自动生成private的get和set方
法,如果程序中没有给变量或方法前面定义了private,那么scala会给这个变量或方法自动生成public的get和set方法。
创建类的对象
private[this] 对类对象较深层次的访问控制
类的构造器
注意:所有重载的构造器,都必须首先调用默认的构造器,或者说调用其它重载的构造器
类的构造器:重载
伴生对象 object:
scala程序中,定义完类之后,一般会定义一个同名的object,它用于存放静态的成员或者方法,当我们第一次调
用这个伴生对象时,它会执行object的构造方法,只是这个构造方法是不接受参数的,而且这个构造方法只会调用一次,以后不会
在调用。
定义:
scala不支持多重继成
trait:工具方法的一个容器
//问题 半生对象和apply方法
半生对象的apply方法:它就是当前类的对象的工厂方法,它可以控制对象的生成。
伴生对象 object:
scala程序中,定义完类之后,一般会定义一个同名的object,它用于存放静态的成员或者方法,当我们第一次调
用这个伴生对象时,它会执行object的构造方法,只是这个构造方法是不接受参数的,而且这个构造方法只会调用一次,以后不会
抽象类
abstract class Person{}
覆写 override
继承
abstract class RDD () extends Serializable with Logging
通用的功能放到trait(类似于工具类)里面
private[spark] var name="spark"//只有spark包下面的才能访问,如:org.spark
第二部分作业
RDD类源码解析:
class RDD它是个抽象类
private[class_name] 指定可以访问该字段的类,访问的级别较严,在编译时,会自动的生成get和set方法,class_name必须是当前定义的类或类的外部类。
class RDD类中有很多加了final修饰符的方法,表示:此方法或属性,子类继承此类时不可被覆写,如下:
RDD是一个弹性的分布式数据集。
呈现了一个不可变的大量元素的分区集合,这些数据能够并行操作
此类包含了一些在所有RDDS的基本操作,如map 、filter、persist
RDD是一个分区集
RDD是一个计算每个分区的函数
RDD是一个依赖其他RDD的集合
RDD是一个计算每个分区首选位置的集合
SparkContext源码解析
SparkContex位于项目的源码路径\spark-master\core\src\main\scala\org\apache\spark\SparkContext.scala中,源文件包含SparkContextClasss声明和其伴生对象SparkContextObject
trait跟class的差别在于,trait没有任何类参数,trait调用的方法是动态绑定的。
class SparkContext类中有多个重载的构造方法:
如下:
startTime没有加上private,scala编译时,startTime这个变量是私有的,但会自动的生成它的public的get和set方法,供外部对象调用。
private[class_name] 指定可以访问该字段的类,访问的级别较严,在编译时,会自动的生成get和set方法,class_name必须是当前定义的类或类的外部类。
这个方法它是一个过程,因为返回值是Unit,没有结果返回。
该类是spark功能的一个主要入口,呈现了对于spark集群的连接,
通常用来创建RDDs,广播集群中变量的变化。
控制着spark的创建和停止。
设置日志的输出级别
线程池的控制
添加jar包
与Hadoop的交互
一:定义类
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:工具方法的一个容器
val array = Array(1,2,3)//调用Array的伴生对象
//问题 半生对象和apply方法
半生对象的apply方法:它就是当前类的对象的工厂方法,它可以控制对象的生成。
伴生对象 object:
scala程序中,定义完类之后,一般会定义一个同名的object,它用于存放静态的成员或者方法,当我们第一次调
用这个伴生对象时,它会执行object的构造方法,只是这个构造方法是不接受参数的,而且这个构造方法只会调用一次,以后不会
抽象类
abstract class Person{}
覆写 override
继承
abstract class RDD () extends Serializable with Logging
通用的功能放到trait(类似于工具类)里面
private[spark] var name="spark"//只有spark包下面的才能访问,如:org.spark
scala类的定义 class HiScala{//默认是public级别的 private var name="Spark"//成员变量 def sayName(){ println(name) } def getName = name } val scala = new HiScala() scala.sayName()//没有参数可以省略()scala.sayName scala.getName class Person { private var myName = "Flink" def name = this.myName def name_=(newName : String){ myName = newName println("Hi" + myName) } } val rocky = new Person rocky.name rocky.name = "Spark" class Person { private var myName = "Flink" def name = this.myName def update(newName : String){ myName = newName println("Hi" + myName) } } //rocky.name报错了 rocky.update("Hadoop") class Person { private var myName = "Flink" def name = this.myName def update(newName : String){ myName = newName println("Hi" + myName) } def talk(p:Person) = { println("Hello!" + p.name) } } val p1 = new Person val p2 = new Person p2.update("Spark") p1.talk(p2) class Person { private[this] var name = "Flink" //本对象独有,另外一个Person对象也访问不到 def update(newName : String){ println("Hi:") } def talk(p:Person) = { println("Hello!" + p.name)//这里会报错 } } //构造函数 class Person(config : SparkConf) extends Logging//与类名并行的是默认构造器 class Person{ var name = "" var age = 0 def update(newName : String){ println("Hi:") } def this(name : String){ this() this.name = name } def this(name : String,age : Int){ this() this.name = name this.age = age } } //伴生对象 class Person{ var name = "" var age = 0 def update(newName : String){ println("Hi:") } def this(name : String){ this() this.name = name } def this(name : String,age : Int){ this() this.name = name this.age = age } } object Person{ println("Scala") var salary = 0.0 def getSalary = salary } Person.getSalary val array = Array(1,2,3)//调用Array的伴生对象
第二部分作业
RDD类源码解析:
class RDD它是个抽象类
private[class_name] 指定可以访问该字段的类,访问的级别较严,在编译时,会自动的生成get和set方法,class_name必须是当前定义的类或类的外部类。
private[spark] def conf = sc.conf
class RDD类中有很多加了final修饰符的方法,表示:此方法或属性,子类继承此类时不可被覆写,如下:
final def dependencies: Seq[Dependency[_]] = { checkpointRDD.map(r => List(new OneToOneDependency(r))).getOrElse { if (dependencies_ == null) { dependencies_ = getDependencies } dependencies_ } } /** * Get the array of partitions of this RDD, taking into account whether the * RDD is checkpointed or not. */ final def partitions: Array[Partition] = { checkpointRDD.map(_.partitions).getOrElse { if (partitions_ == null) { partitions_ = getPartitions } partitions_ } } final def getNumPartitions: Int = partitions.length
RDD是一个弹性的分布式数据集。
呈现了一个不可变的大量元素的分区集合,这些数据能够并行操作
此类包含了一些在所有RDDS的基本操作,如map 、filter、persist
RDD是一个分区集
RDD是一个计算每个分区的函数
RDD是一个依赖其他RDD的集合
RDD是一个计算每个分区首选位置的集合
SparkContext源码解析
SparkContex位于项目的源码路径\spark-master\core\src\main\scala\org\apache\spark\SparkContext.scala中,源文件包含SparkContextClasss声明和其伴生对象SparkContextObject
创建sarpkContext唯一需要的参数就是sparkConf。它是一组K-V属性对
class SparkContext(config: SparkConf)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)) /** * Alternative constructor that allows setting common Spark properties directly * * @param master Cluster URL to connect to (e.g. mesos://host:port, spark://host:port, local[4]). * @param appName A name for your application, to display on the cluster web UI. * @param sparkHome Location where Spark is installed on cluster nodes. * @param jars Collection of JARs to send to the cluster. These can be paths on the local file * system or HDFS, HTTP, HTTPS, or FTP URLs. * @param environment Environment variables to set on worker nodes. */ 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)) this.preferredNodeLocationData = preferredNodeLocationData }
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,没有结果返回。
该类是spark功能的一个主要入口,呈现了对于spark集群的连接,
通常用来创建RDDs,广播集群中变量的变化。
控制着spark的创建和停止。
设置日志的输出级别
线程池的控制
添加jar包
与Hadoop的交互
相关文章推荐
- LeetCode 219:Contains Duplicate II
- 前端设备大数据
- [大数据] zookeeper 安装和配置
- 简单使用 SSKeychain 存储密码
- 大数据学习之Scala中数据类型(3)
- NSLayoutConstraint 简单理解
- 大数据学习之Scala中main函数的分析以及基本规则(2)
- hadoop jps出现process information unavailable提示解决办法
- Fzuoj 2216 The Longest Straight 【二分 || 模拟】
- Spark 1.X 大数据平台
- Saiku去掉登录模块
- 大数据学习之Scala的环境搭建和Hello World程序的实现(1)
- Facebook人工智能负责人Yann LeCun谈深度学习的局限性
- QDU65 again and again(字典序暴力or字典树)
- 151219DuoTaiDemo
- 趣说游戏AI开发:对状态机的褒扬和批判
- 大数据系列第三课:scala中阶
- [Android Pro] 网络流量安全测试工具Nogotofail
- VT-x is not available (VERR_VMX_NO_VMX) 的解决方案
- OC对象的retainCount(引用计数器)