![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Scala
潇洒哥WH3
华中科技大学计算机科学与技术学院在读研究生
展开
-
object
在scala中是没有静态方法和静态字段的,但是可以使用object关键字来实现同样的功能。1、工具类,存放常量和工具方法2、实现单例模式package testimport scala.collection.mutable.ArrayBuffer/** * @author: whua * @create: 2018/09/29 20:43 */object S...原创 2018-10-11 08:39:16 · 135 阅读 · 0 评论 -
简单的Spark案例——课程学习量统计
需求:如下图的文件中有很多访问记录,第一列表示访问站点的时间戳,第二列表示访问的站点,中间用制表符分割。这里相当于学习的不同课程,如java,ui,bigdata,android,h5等,其中每门课程又分为子课程,如h5课程分为teacher,course等。现在需要统计每门课程,学习量最高的两门子课程并降序排列。测试数据下载地址链接:https://pan.baidu.com/s/1D...原创 2018-10-12 00:16:40 · 2959 阅读 · 3 评论 -
范型
范型: [B <: A] UpperBound 上界:B类型的上界是A类型,即B类型的父类是A类型 [B >: A] LowerBound 下界:B类型的下界是A类型,即B类型的子类是A类型 [B <% A] ViewBound 表示B类型要转换成A类型需要一个隐式转换函数 [B : A] ContextBound 表示B类型要转换成A类型需要...原创 2018-10-12 00:07:55 · 197 阅读 · 0 评论 -
隐式转换
隐式转换和隐式参数 作用:能够丰富现有类库的功能,对类的方法进行增强 隐式转换函数:以implicit关键字声明并带有单个参数的函数 package testimport scala.io.Source/** * @author: whua * @create: 2018/10/08 15:29 */class RichFile(val file: ...原创 2018-10-11 08:56:37 · 101 阅读 · 0 评论 -
Currying
柯里化:把接收多个参数的函数变成接收一个参数的函数柯里化的两种声明方法: def curry(x:Int)(y:Int) = x*y def curry(x:Int) = (y:Int) => x*y package test/** * @author: whua * @create: 2018/10/08 14:38 */object Curry...原创 2018-10-11 08:55:08 · 229 阅读 · 0 评论 -
模式匹配
字符串匹配package test.matchdemoimport scala.util.Random/** * @author: whua * @create: 2018/10/08 10:06 * 匹配字符串 */object MatchStr { def main(args: Array[String]): Unit = { v...原创 2018-10-11 08:53:25 · 149 阅读 · 0 评论 -
抽象类 & 特质
特质trait类似于Java中的接口,一个类可以同时继承多个trait,但是一次只能继承一个类。trait和抽象类中,都可以定义没有赋值的字段,没有实现的方法,有实现的方法,在实现或继承的时候,必须给没有赋值的字段赋值,必须实现没有实现的方法,有实现的方法也可以重写。继承class的关键字为extends,继承trait的关键字为with;当没有继承class,只继承trait时,用ext...原创 2018-10-11 08:49:58 · 195 阅读 · 0 评论 -
private的使用
在类中用private修饰的字段,只能在本类和其伴生对象中访问。在类中用private[this]修饰的字段,只能在本类中访问。类名前加private[包名]是指包访问权限,只有这个包有该类的访问权限。构造器参数列表前加private是指伴生对象的权限,只有伴生对象才能访问。package test/** * @author: whua * @create: 201...原创 2018-10-11 08:48:44 · 6885 阅读 · 0 评论 -
apply 与 unapply 方法
apply方法通常称为注入方法,在伴生对象里做一些初始化的操作。apply方法的参数列表不需要和构造器的参数列表统一。unapply方法通常称为提取方法,使用unapply方法来提取固定数量的对象。unapply方法会返回一个序列(option),内部产生一个Some对象来存放一些值。apply方法和unapply方法会被隐式调用。package test/** * ...原创 2018-10-11 08:47:51 · 960 阅读 · 0 评论 -
伴生对象
与类名相同并且用object修饰的对象叫做伴生对象。类和其伴生对象之间可以相互访问私有方法和属性。package test/** * @author: whua * @create: 2018/09/30 11:09 */class Dog { private var name = "二哈" def printName(): Unit = { //...原创 2018-10-11 08:46:40 · 205 阅读 · 0 评论 -
类:class
声明类时不需要加public关键字,默认就是public,类名通常与文件名相同。一个类文件可以声明多个类。scala类中不需要自己定义get和set方法,用val修饰的变量时只读的,相当于只有get方法,没有set方法;用var修饰的变量相当于既有get又有set方法。用private修饰的属性,该属性属于私有属性,只能在本类和其伴生对象中访问。用private[this]修饰的属...原创 2018-10-11 08:44:24 · 389 阅读 · 0 评论 -
构造器:Structor
主构造器的参数列表要放在类名的后面,和类名放在一起。val修饰的构造参数具有不可变性,var修饰的构造参数具有可变性。没有加val或者var修饰的构造参数,默认是val的,但是该构造参数只能在本类调用,伴生对象也无法调用,如果要在其它类中访问,可以定义一个get方法来获取。辅助构造器类似于java中的多构造器,可以有不同的构造参数,辅助构造器的第一行必须先调用主构造器。packa...原创 2018-10-11 08:43:22 · 1517 阅读 · 0 评论 -
RDD
1、什么是RDDRDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变、可分区、里面的元素可并行计算的集合。RDD具有数据流模型的特点:自动容错、位置感知性调度和可伸缩性。RDD允许用户在执行多个查询时显式地将工作集缓存在内存中,后续查询能重用工作集,这极大地提升了查询速度。2、RDD的属性(1...原创 2018-10-12 08:20:31 · 213 阅读 · 0 评论