
Scala & Spark
文章平均质量分 75
SuPhoebe
不是我针对谁,我是说在座的诸位都比我强
展开
-
scala中的高阶函数和柯里化
高阶函数在计算机科学中,高阶函数是至少满足下列一个条件的函数:接受至少一个函数作为输入输出一个函数在数学中它们也叫做算子(运算符)或泛函。微积分中的导数就是常见的例子,因为它映射一个函数到另一个函数。高阶函数的例子假设有一个函数对给定两个数区间中的所有整数求和:def sumInts(a: Int, b: Int): Int = if(a > b) 0原创 2018-01-23 22:09:51 · 842 阅读 · 0 评论 -
scala中的泛型编程
Scala中的泛型编程简介在Java或者C++里面,像列表(List)这些数据结构,在编写的时候,都不需要指定其中元素的类型,而是构造的时候指定,这一特性就称为泛型。同样,Scala中也提供了泛型,而且功能比Java的泛型更加强大。List strList = new ArrayList();strList.add("one");strList.add("two");st原创 2018-01-31 05:17:40 · 1403 阅读 · 0 评论 -
scala中的隐式转换与隐式参数
scala中的隐式转换与隐式参数简介在scala语言中,隐式转换是无处不在的,它们存在固有的隐式转换,不需要人工进行干预。这是我们之前说的Scala类的继承情况,虚线标注出了Scala帮我们实现的隐式转化。例如Float在必要情况下自动转换为Double类型在 scala中的泛型编程的视图界定中我们也提到,视图界定可以跨越类层次结构进行,它背后的实现原理就是隐式转换。例原创 2018-02-04 10:15:40 · 401 阅读 · 0 评论 -
scala中的call-by-name和call-by-value
scala中的call-by-name和call-by-valuevar/def/val/lazy valdef:类似于每一次重新赋值,如果是用def定义函数,则是每一次重新获得一个函数,做call-by-name操作。val:获得一次,并立即执行,且在生命周期内不能再被修改,使用的是call-by-value操作。var:在生命周期内可以被再次赋值lazy val:惰性执行,原创 2018-01-20 05:01:08 · 1490 阅读 · 0 评论 -
scala中的方法
scala中的方法在OOP中,方法作用于对象,是对象的行为,在Scala中的方法也是如此。 方法定义定义方法的基本格式是:def 方法名称(参数列表):返回值 = 方法体scala中方法的返回值默认是方法体重的最后一行表达式 的值,当然也可以用return来执行返回值,但scala并不推荐这么做。 def function1(param1: String, para原创 2018-01-20 07:21:38 · 318 阅读 · 0 评论 -
scala中的尾递归
递归一个函数直接或间接的调用它自己,就是递归了。例如,递归计算阶乘:def factorial(n: Int): Int = { if( n 1 ) 1 else n * factorial(n-1)}以上factorial方法,在n>1时,需要调用它自身,这是一个典型的递归调用。如果n=5,那么该递归调用的过程大致如下: factorial(5)原创 2018-01-20 07:22:14 · 2250 阅读 · 1 评论 -
Spark中的RDD基本操作
Spark中的RDD基本操作前言RDD是spark特有的数据模型,谈到RDD就会提到什么弹性分布式数据集,什么有向无环图。这些知识点在别的地方介绍得非常多,本文就不去讲这些了。在阅读本文时候,大家可以就把RDD当作一个数组,或者一个Scala的collection对象,这样的理解对我们学习RDD的API是非常有帮助的。RDD的创建Spark里的计算都是操作RDD进行,那...原创 2018-02-11 05:32:59 · 9394 阅读 · 2 评论 -
Scala中的yield
Scala中的yield简介对于for循环的每次迭代,yield都会生成一个将被记住的值。就像有一个你看不见的缓冲区,for循环的每一次迭代都会将另一个新的值添加到该缓冲区。 当for循环结束运行时,它将返回所有已赋值的集合。返回的集合的类型与迭代产生的类型相同,因此Map会生成Map,List将生成List,等等。另外请注意,最初的集合没有改变。for / yield构造根据原创 2018-02-07 05:07:00 · 1250 阅读 · 0 评论 -
Scala中的Option
Scala中的Option避免null使用大多数语言都有一个特殊的关键字或者对象来表示一个对象引用的是“无”,在Java,它是null。写Java程序的时候,经常会碰到没有有意义的东西可以返回,我们返回null。在Java 里,null 是一个关键字,不是一个对象,所以对它调用任何方法都是非法的。因此调用方必须检查返回值,不然会有NullPointerException的异常。...原创 2018-02-13 05:20:36 · 3151 阅读 · 0 评论 -
Spark中的cache和persist
Spark中cache和persist的作用以及存储级别前言Spark开发高性能的大数据计算作业并不是那么简单。如果没有对Spark作业进行合理的调优,Spark作业的执行速度可能会很慢,这样就完全体现不出Spark作为一种快速大数据计算引擎的优势来。因此,想要用好Spark,就必须对其进行合理的性能优化。有一些代码开发基本的原则,避免创建重复的RDD,尽可能复用同一个RDD,如下...原创 2018-02-08 11:51:05 · 5837 阅读 · 0 评论 -
scala中的集合与集合操作
scala中的集合Scala的集合类可以从三个维度进行切分:可变与不可变集合(Immutable and mutable collections)静态与延迟加载集合 (Eager and delayed evaluation )串行与并行计算集合(Sequential and parallel evaluation )可变与不可变集合[1]可变集合可以在适当的地方被更新或扩原创 2018-02-04 01:05:28 · 3412 阅读 · 0 评论 -
scala中的require和assert
Scala中的require和assertrequire和assert都用于在运行时执行某些检查来验证某些条件。那么他们的差别是什么呢?assert意味着你的程序已经达到了不一致的状态,这可能是目前的方法/函数的一个问题(我喜欢把它想成HTTP 500 InternalServerError)require意味着方法的调用者有问题,应该修复它的调用(我喜欢把它看作HTTP 400原创 2018-01-27 12:57:57 · 7707 阅读 · 0 评论 -
Scala中的模式匹配
Scala中的模式匹配前言模式匹配是一种scala中的一种函数式编程概念,也常常用于OOP中的一些多态实现,跟java、C++中的switch case或者正则表达式神似,但是试用范围更广。大家需要记住的是:Scala的模式匹配发生在但绝不仅限于发生在match case语句块中,这是Scala模式匹配之所以重要且有用的一个关键因素!match表达式match表达式始原创 2018-02-03 01:50:10 · 908 阅读 · 0 评论 -
scala中的类型擦除的问题
Overcoming type erasure in Scala原文来自Overcoming type erasure in Scala。本文旨在展示一些技术来解决由Scala泛型编程中的类型擦除引起的一些常见问题。介绍Scala有一个非常强大的类型系统,Scala是强类型语言。存在类型,结构类型,嵌套类型,路径依赖类型,抽象和具体类型成员,类型边界((upper, lower,翻译 2018-02-01 00:26:43 · 3140 阅读 · 0 评论 -
scala中的一切皆对象
scala中的一切皆对象单纯从面向对象的角度来看待scala,可以说scala就是一门纯面向对象的编程语言,因为在scala中,一切都可以看做是对象。这点和java是不同的,java中区分基本数据类型和引用类型。可以说scala比Java的面向对象理念还彻底!数字对象scala> 5210000 + 1 *1024 / 1res0: Int = 5211024scal原创 2018-01-31 12:24:20 · 690 阅读 · 0 评论 -
Scala和Java中的Infinity和NaN
Scala和Java中的Infinity和NaNInfinityi == i + 1,一个数字永远不会等于它自己加1?Java强制要求使用IEEE 754浮点数算术运算,它可以让你用一个double或float来表示无穷大。正如我们在学校里面学到的,无穷大加1还是无穷大。你可以用任何被计算为无穷大的浮点算术表达式来初始化i,例如:double i = 1.0 / 0.0原创 2018-02-01 10:31:13 · 6030 阅读 · 0 评论 -
Scala中的override
Scala中的overrideoverride是覆盖的意思,在很多语言中都有,在scala中,override是非常常见的。在类继承方面,它和java不一样,不是可写可不写的了,而是必须写的。如果不写而覆盖了对应的属性或者方法的话,编译器就会报错了。基础用法/*基本的override特性*/object Testclass { class A {原创 2018-01-25 06:53:10 · 3296 阅读 · 0 评论 -
scala中的classOf、isInstanceOf、asInstanceOf
scala中的classOf、isInstanceOf、asInstanceOfScala的三个预定义(predefined)方法,我们经常用到。object PredefineTest{ def main(args: Array[String]): Unit = { val c : Char = 97.asInstanceOf[Char] "hello原创 2018-02-01 12:57:35 · 7103 阅读 · 0 评论 -
Scala中的类和构造器
Scala中的类摘要网络上很多资料讲得不清不楚的,有些甚至是片面的错误的,看语言应该是直接用翻译器将英文翻译成中文。所以依照着网上的一些说法和自己的实验重新将一些概念和定义讲解一些。scala编译器会自动为类中的字段添加getter方法和setter方法可以自定义getter/setter方法来替换掉编译器自动产生的方法用@BeanProperty注解来生成JavaBeans原创 2018-01-26 02:44:49 · 5964 阅读 · 3 评论 -
Scala中的抽象类与特征
Scala中的抽象类与特征抽象类Scala的抽象类跟Java的一样,不能被实例化。其中一些特性也与Java的抽象类非常类似。定义抽象类需要使用abstract在抽象类中,变量不使用就无需初始化,可以等到子类继承时再进行初始化。在抽象类中,抽象方法无需使用(也不能)用abstract进行修饰。 一个方法只要是没有它的实现(没有等号或没有方法体),它就是抽象的,在子类中覆写或者原创 2018-01-27 01:28:50 · 1535 阅读 · 0 评论 -
Scala中的Any、Nothing、Null、Nil
Scala中的Any、Nothing、Null、NilAny在scala中,Any类是所有类的超类。Any有两个子类:AnyVal和AnyRef。对于直接类型的scala封装类,如Int、Double等,AnyVal是它们的基类;对于引用类型,AnyRef是它们的基类。Any是一个抽象类,它有如下方法:!=()、==()、asInstanceOf()、equals()、hash原创 2018-01-27 10:30:25 · 6608 阅读 · 0 评论 -
函数式编程介绍
历史来源讲述历史来源,不喜欢的可以跳过。但是我个人认为这对理解有帮助。在计算机的世界中,有两位巨擘对问题的可计算性做了模型化描述[4]。一位是阿兰.图灵(Alan Turing),他提出的图灵机。计算机系的各种学科中都充斥着这个概念,假设有一个纸带和一个打孔机,然后有一套指令,能够控制打孔机在纸带上移动、能够读取当前位置是否打了孔、能够在当前位置打一个孔,这就是一个图灵机,假设一个问题原创 2018-01-19 10:44:59 · 32821 阅读 · 23 评论 -
Scala中的文件操作
Scala中的文件操作文件读取在Scala中,如果只是简单的读取文件内容,可以有两种方法,第一是使用Java的API,第二种就是使用scala.io.Source模块。读取行import scala.io.Source;object Demo extends App { val filename = "/Users/Phoebe/Documents/haha...原创 2018-02-18 08:38:40 · 1756 阅读 · 0 评论