摘要:柯里化(Currying)指的是将原来接受两个参数的函数变成新的接受一个参数的函数的过程。新的函数返回一个以原有第二个参数为参数的函数。 实例 首先我们定义一个函数: 那么我们应用的时候,应该是这样用:add(1,2) 现在我们把这个函数变一下形: 那么我们应用的时候,应该是这样用:add(1)(2
阅读全文
摘要:Scala 中定义匿名函数的语法很简单,箭头左边是参数列表,右边是函数体。 使用匿名函数后,我们的代码变得更简洁了。 下面的表达式就定义了一个接受一个Int类型输入参数的匿名函数: 上述定义的匿名函数,其实是下面这种写法的简写: 以上实例的 inc 现在可作为一个函数,使用方式如下: 同样我们可以在
阅读全文
摘要:递归函数在函数式编程的语言中起着重要的作用。 Scala 同样支持递归函数。 递归函数意味着函数可以调用它本身。 以上实例使用递归函数来计算阶乘: 执行以上代码,输出结果为:
阅读全文
摘要:高阶函数(Higher-Order Function)就是操作其他函数的函数。 Scala 中允许使用高阶函数, 高阶函数可以使用其他函数作为参数,或者使用函数作为输出结果。 以下实例中,apply() 函数使用了另外一个函数 f 和 值 v 作为参数,而函数 f 又调用了参数 v: 执行以上代码,
阅读全文
摘要:一般情况下函数调用参数,就按照函数定义时的参数顺序一个个传递。但是我们也可以通过指定函数参数名,并且不需要按照顺序向函数传递参数,实例如下: 执行以上代码,输出结果为:
阅读全文
摘要:Scala 偏应用函数是一种表达式,你不需要提供函数需要的所有参数,只需要提供部分,或不提供所需参数。 如下实例,我们打印日志信息: 执行以上代码,输出结果为: 实例中,log() 方法接收两个参数:date 和 message。我们在程序执行时调用了三次,参数 date 值都相同,message
阅读全文
摘要:我们可以在 Scala 函数内定义函数,定义在函数内的函数称之为局部函数。 以下实例我们实现阶乘运算,并使用内嵌函数: 执行以上代码,输出结果为:
阅读全文
摘要:Scala 可以为函数参数指定默认参数值,使用了默认参数,你在调用函数的过程中可以不需要传递参数,这时函数就会调用它的默认参数值,如果传递了参数,则传递值会取代默认值。实例如下: 执行以上代码,输出结果为:
阅读全文
摘要:Scala 允许你指明函数的最后一个参数可以是重复的,即我们不需要指定函数参数的个数,可以向函数传入可变长度参数列表。 Scala 通过在参数的类型之后放一个星号来设置可变参数(可重复的参数)。例如: 执行以上代码,输出结果为:
阅读全文
摘要:Scala的解释器在解析函数参数(function arguments)时有两种方式: 传值调用(call-by-value):先计算参数表达式的值,再应用到函数内部; 传名调用(call-by-name):将未计算的参数表达式直接应用到函数内部 在进入函数内部前,传值调用方式就已经将参数表达式的值
阅读全文
摘要:Scala Option(选项)类型用来表示一个值是可选的(有值或无值)。 Option[T] 是一个类型为 T 的可选值的容器: 如果值存在, Option[T] 就是一个 Some[T] ,如果不存在, Option[T] 就是对象 None 。 接下来我们来看一段代码: 在上面的代码中,myM
阅读全文
摘要:与列表一样,元组也是不可变的,但与列表不同的是元组可以包含不同类型的元素。 元组的值是通过将单个的值包含在圆括号中构成的。例如: 以上实例在元组中定义了三个元素,对应的类型分别为[Int, Double, java.lang.String]。 此外我们也可以使用以上方式来定义: 元组的实际类型取决于
阅读全文
摘要:Map(映射)是一种可迭代的键值对(key/value)结构。 所有的值都可以通过键来获取。 Map 中的键都是唯一的。 Map 也叫哈希表(Hash tables)。 Map 有两种类型,可变与不可变,区别在于可变对象可以修改它,而不可变对象不可以。 默认情况下 Scala 使用不可变 Map。如
阅读全文
摘要:Scala Set(集合)是没有重复的对象集合,所有的元素都是唯一的。 Scala 集合分为可变的和不可变的集合。 默认情况下,Scala 使用的是不可变集合,如果你想使用可变集合,需要引用 scala.collection.mutable.Set 包。 默认引用 scala.collection.
阅读全文
摘要:Scala 列表类似于数组,它们所有元素的类型都相同,但是它们也有所不同:列表是不可变的,值一旦被定义了就不能改变,其次列表 具有递归的结构(也就是链接表结构)而数组不是。。 列表的元素类型 T 可以写成 List[T]。例如,以下列出了多种类型的列表: 构造列表的两个基本单位是 Nil 和 ::
阅读全文
摘要:【注】该系列文章以及使用到安装包/测试数据 可以在《倾情大奉送--Spark入门实战系列》获取 1、Tachyon介绍 1.1 Tachyon简介 随 着实时计算的需求日益增多,分布式内存计算也持续升温,怎样将海量数据近乎实时地处理,或者说怎样把离线批处理的速度再提升到一个新的高度是当前研究的重 点
阅读全文
摘要:Parquet是面向分析型业务的列式存储格式,由Twitter和Cloudera合作开发,2015年5月从Apache的孵化器里毕业成为Apache顶级项目,最新的版本是1.8.0。 列式存储 列式存储和行式存储相比有哪些优势呢? 当时Twitter的日增数据量达到压缩之后的100TB+,存储在HD
阅读全文
摘要:https://www.iteblog.com/
阅读全文
摘要:问题导读 1.Spark运行包含哪些流程? 2.本文认为Spark运行架构有哪些特点? 3.DAGScheduler的作用是什么? 4. RDD在Spark架构中是如何运行的? 5.Spark on Standalone运行包含哪些过程? 1.Spark运行基本流程参见下面示意图 1.构建Spark
阅读全文
摘要:在Mesos上运行Spark Spark可以在由Apache Mesos 管理的硬件集群中运行。 在Mesos集群中使用Spark的主要优势有: 可以在Spark以及其他框架(frameworks)之间动态划分资源。 可以同时部署多个Spark实例,且各个实例间的资源分配可以调整。 工作原理 在独立
阅读全文