/** * 函数式编程进阶: * 1.函数和变量一样作为Scala语言的一等公民,函数可以直接赋值给变量 * 2.函数更常用的方式是匿名函数,定义的时候只需要说明输入参数的类型和函数体即可,不需要名称, * 一般会把它赋值给变量,在Spark源码中大量存在 * 3.函数可以作为参数直接传递给函数,极大的简化了编程代码,在Java中需要通过callback来实现 * 这样的功能 * 4.当函数的返回类型是函数的时候,这就表明Scala函数实现了闭包,Scala函数其实是类和对象, * 所以,Sca…
本课内容1.Map和Tuple在Spark源码中的鉴赏2.Map和Tuple代码操作实战 ------------------------------------------------------------------------------------------------------------------------/** *  Scala中最常见的两种数据结构:Map 和 Tuple *   *  Map初步感受就是key,value方式,key即是值的索引,排列非常规按照Hash…
1. 函数式编程 1)概念 函数式编程是一种编程模型,他将计算机运算看做是数学中函数的计算,并且避免了状态以及变量的概念.wiki 我们知道,对象是面向对象的第一型,那么函数式编程也是一样,函数是函数式编程的第一型.在面向对象编程中,我们把对象传来传去,那在函数式编程中,我们要做的是把函数传来传去,而这个,说成术语,我们把他叫做高阶函数.飞林沙 2)特点 计算视为视为函数而非指令 纯函数式编程:不需变量,无副作用,测试简单(每次的执行结果是一样的) 支持高阶函数,代码简洁 2. python支持…
承接上文:Java函数式编程:一.函数式接口,lambda表达式和方法引用 这次来聊聊函数式编程中其他的几个比较重要的概念和技术,从而使得我们能更深刻的掌握Java中的函数式编程. 本篇博客主要聊聊以下几个问题 高阶函数 闭包概念 函数组合处理函数的使用 柯里化以及部分求值 下面开始: 1.高阶函数 高阶函数这里指的可不是数学里的那个,这里主要要从维度这个概念理解,什么叫高维?如果a是一维,那么生成a的存在就是高维.在这里,函数就是这个a,高阶函数指的就是能生成函数或是以函数为参数的函数 定义:…
Scala函数式编程 ------------------------------------------------------------------------------------------------------------------------/** * 函数可以被简单的被认为是包裹了一条或几条语句的代码体, * 该代码体接收若干参数,经过代码体处理后返回结果, * 刑如数学中的f(x) = x + 1 *  * 在Scal中函数式一等公民,可以像变量一样被传递,被赋值,同时 …
Spark中的源码的提取器和注解 @SparkContext.scala @ volatile 线程专用 保证线程间共享内容的一致性 @volatile private var _dagScheduler: DAGScheduler = _ @ DeveloperApi 表示开发者使用的API /** * :: DeveloperApi :: * Return information about what RDDs are cached, if they are in mem or on dis…
本篇文章主要讲述Scala函数式编程之偏函数,异常,及Lazy 第一部分:偏函数 偏函数:当函数有多个参数,而在使用该函数时不想提供所有参数(比如函数有3个参数),只提供0~2个参数,此时得到的函数便是偏函数. */ object C18 { def main(args: Array[String]): Unit = { val sample=1 to 10 val isEven:PartialFunction[Integer,String]={ case x if x%2==0=>x+"…
val声明的不可变的战略意义:1.函数式编程中要求值不可变,val天然符合这一特性:2.在分布式系统中,一般都要求值不可变,这样才能够要求分布式系统的设计和实现,同时拥有更高的效率,val声明的内容都不可变,所以不用担心在机器之间传递数据的时候修改数据,这为分布式编程打下非常好的基础,包括Spark中的核心抽象RDD也是不可变得: 重要结论:Scala中一切皆对象.Scala中所有类型都是Class Scala的apply方法:是Scala对象构造的工厂方法,由于控制Scala类对象的生成,实际…
package com.dt.spark.scala.bascis class Dataframework case class Computerframework (name:String,popular:Boolean) extends Dataframework case class Storgeframework (name:String,popular:Boolean) extends Dataframework object helloPatternMatch { def main(…
/** * 如果有这些语法的支持,我们说这门语言是支持面向对象的语言 * 其实真正面向对象的精髓是不是封装.继承.多态呢? * --->肯定不是,封装.继承.多态,只不过是支撑面向对象的 * 一些语言级别的语法和功能,真正的面向对象其实有三个核心特征: * 第一:对象不用关心消息从哪里来,也不关心消息到哪去,只关心消息处理本身 * ,也就是说面向对象是弱耦合的且对象是消息驱动的,或者说对象是数据驱动的 * 第二:一个对象的行为不影响另一个对象的行为,一个对象挂掉了另一个对象 * 不会随着它一起挂…