![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Scala
啊策策
通吃java, 大数据.
展开
-
Scala 概述、Scala编译器安装、Idea配置Scala编译器 01
1. 什么是ScalaScala是一种多范式的编程语言,其设计的初衷是要集成面向对象编程和函数式编程的各种特性。Scala运行于Java平台(Java虚拟机),并兼容现有的Java程序。Scala官网2. 为什么要学Scala优雅(不臃肿,不繁琐): 这是框架设计师第一要考虑的问题,框架的用户是应用开发程序员,API是否优雅直接影响用户体验。ps框架师就是写API,写框架的大牛~速度...原创 2019-04-28 14:16:32 · 450 阅读 · 0 评论 -
Scala中Akka发送异步有返回值、返回值Future[Any] 20
样例类 case class ReturnMes(map:Map[String,Int])react 方法中接收到消息返回结果 sender ! ReturnMes(map)object中,发送消息后接收到结果,得到未来的某一个结果val future:Future[Any] = actor !! sendMes(array(0))val result:Any = future.appl...原创 2019-05-24 19:07:43 · 794 阅读 · 4 评论 -
Scala中Akka实战,使用Akka完成wordCount计算任务、计算wordCount只有一个源文件 21
1. 具体需求&思路需求:实现单个文件的单词计数源文件:E:\wordCount.txt代码思路:继承actor重写act()方法调用start()方法发送消息接收消息a. 读取源文件,得到字符串,切割为list集合(每一行是一个元素),对 list进行flatMap()得到 =>Array[String] k1 v1b. 自定义map逻辑,对Array[S...原创 2019-05-25 11:58:34 · 249 阅读 · 0 评论 -
Akka实战、使用Scala的Akka编写wordCount实例,wordCount的目标文件是多个文件 22
前言需要计算的目标文件是多个txt文档,代码如下import java.io.Fileimport scala.actors.{Actor, Future}import scala.collection.immutable._import scala.collection.mutableimport scala.collection.mutable.ListBufferimport...原创 2019-05-25 15:38:39 · 212 阅读 · 0 评论 -
Scala中算子练习、map()、filter()、sortBy()、reverse、grouped()、flatten()、flatMap()、reduceLeft() 23
import scala.collection.parallel.immutable.ParSeq/** * */object ListTest { def main(args: Array[String]): Unit = { //创建一个List val list0=List(1,7,9,8,0,3,5,4,6,2) //1 将list0中的每一个元...原创 2019-05-25 15:42:37 · 927 阅读 · 0 评论 -
Scala中下划线的使用 24
1. 将方法转化为函数def m1(x:Int,y:Int) = x*yval f1 = m1_2. 集合中的每一个元素val list = List(1,2,3,4)val list1 = list.map(_ * 10)3. 获取元组Tuple中的元素val t = ("hadoop",3.14,100) t._1 t._2 t._34. 模式匹配val w...原创 2019-05-25 16:18:07 · 154 阅读 · 0 评论 -
Scala高级特性之高阶函数、作为值的函数、匿名函数、柯里化(Currying)、闭包 25
前言之高阶函数的概念Scala混合了面向对象和函数式的特性,我们通常将可以作为参数传递到方法中的表达式叫做函数。在函数式编程语言中,函数是“头等公民”,高阶函数包含:作为值的函数、匿名函数、闭包、柯里化等等。1. 作为值的函数可以像任何其他数据类型一样被传递和操作的函数,每当你想要给算法传入具体动作时,这个特性就会变得非常有用。scala>val arr = Array(1,2,3,...原创 2019-05-26 10:38:09 · 399 阅读 · 0 评论 -
Scala隐式转换、隐式参数、隐式方法、implicit关键字修饰方法/变量(参数)、隐式转换的时机、隐式转换和隐式参数案例 26
前言隐式转换就是,让某一个类具有另一个class(或者另一个object)的方法/参数值。隐式参数&隐式方法隐式参数,用一个类型的隐式参数只能定义异常implicit修饰隐式值或者有方法相应触发隐式转换,需要在使用处导入import object名称.隐式参数/隐式方法名称只能定义在object中让class A具有class B的功能implicit aToB(...原创 2019-05-26 11:33:34 · 457 阅读 · 0 评论 -
Scala面向对象编程之对象、Scala中object的作用、Scala中的伴生对象、Scala中的apply方法、Scala中的main方法 10
1. Scala中的objectobject相当于class中的单个实例,通常存放一些一些静态field或者method;在Scala中没有静态方法和静态字段,但是可以使用object这个语法结构来达到同样的目的。Scala中object的作用:存放工具方法和常量高效共享单个不可变的实例单例模式代码如下import scala.collection.mutable.Arr...原创 2019-05-13 17:25:45 · 761 阅读 · 0 评论 -
Scala面向对象编程之继承下篇、Scala中使用模式匹配进行类型判断、Scala中protected、Scala中调用父类的constructor、 匿名内部类、抽象类、抽象field 12
1. Scala中使用模式匹配进行类型判断在实际的开发中,比如spark源码中,大量的地方使用模式匹配的语法进行类型的判断,这种方式更加地简洁明了,而且代码的可维护性和可扩展性也非常高;使用模式匹配,功能上来说,与isInstanceOf的作用一样...原创 2019-05-18 08:55:49 · 249 阅读 · 0 评论 -
Scala中面向对象编程之trait上篇、将trait作为接口使用、在trait中定义具体方法、在trait中定义具体field、在trait中定义抽象field 13
1. 将trait作为接口使用Scala中的trait是一种特殊的概念首先先将trait作为接口使用,此时trait就与java中的接口(interface)非常类似;在trait中可以定义抽象方法,就像抽象类中的抽象方法一样,只要不给出方法的方法体即可;类可以使用extends关键字继承trait,注意,这里没有implement,而是extends。在Scala中没有implemen...原创 2019-05-18 09:44:23 · 358 阅读 · 0 评论 -
Actor实战、怎么实现actor并发编程、实现actor发送/接受消息、实现actor不断地接受消息、使用react方法代替receive接受消息、结合case class样例类发送/接收消息 19
1. 怎么实现actor并发编程原创 2019-05-24 10:34:17 · 397 阅读 · 0 评论 -
Scala实战编程、Akka实现一个简易版的spark通信编程、spark原理、Akka简介、启动Akka在IDEA中配置参数 27
1. Spark底层通信原理(Akka)1.1 原理主节点Master,从节点Worker每个节点底层都是Akka原理,主从之间通信,其实就是actor之间通信。老大ActorSystem老大负责创建actorworker通信给master,需要使用master的引用,master给worker通信,直接sender。1.2 RPCAkka底层也是RPC原理,RPC(R...原创 2019-05-28 16:20:15 · 358 阅读 · 0 评论 -
Scala面向对象编程之基继承上篇、extends的概念、override 和 super 关键字、isInstanceOf 和 asInstanceOf、getClass 和 classOf 11
1. Scala中继承(extends)的概念Scala中,让子类继承父类,与Java一样,也是使用extends关键字;继承就代表,子类可以继承父类的field和method,然后子类还可以在自己的内部实现父类没有的,子类特有的field和method,使用继承可以有效复用代码;子类可以覆盖父类的field和method,但是如果父类用final修饰,或者field和method用fin...原创 2019-05-16 09:46:45 · 238 阅读 · 0 评论 -
Scala中的集合、不可变List、可变ListBuffer、不可变Set、可变HashSet、不可变Map、可变HashMap 08
前言Scala的集合有三类:序列Seq、Set、映射Map,所有的集合都扩展子Iterable特质,在Scala中集合有可变(mutable)和不可变(immutable)两种类型,immutable类型的集合初始化后内容就不能改变了...原创 2019-05-08 09:09:14 · 2889 阅读 · 2 评论 -
IDEA创建Scala项目、IDEA设置Scala自动生成返回值快捷键、IDEA配置生成Scala变量返回值类型 02
1. IDEA创建Scala项目创建Project项目选择Scala选项命名项目名称src下面创建包包下面创建Scala类/Object2. IDEA自动生成返回值,快捷键设置找到Setting入口找到菜单栏找到具体的Variable(变量)自定义快捷键,默认是Ctrl+Alt+V,但是3个键太不方便了,这里我自定义为Ctrl+G点击快捷键,右键选...原创 2019-04-29 10:54:25 · 7896 阅读 · 5 评论 -
Scala基础、Scala定义方法和函数、Scala块表达式、Scala循环 03
前言Scala代码想要运行,要么有入口main函数,要么基础App。否则无法编译运行。object test Test { def main(args: Array[String]) { ...... }}object test extends App {......}1. 声明变量使用val定义的变量值是不可变的,相当于java里用final修饰的变量使用var...原创 2019-04-29 18:52:02 · 210 阅读 · 0 评论 -
Scala中方法和函数的区别、class和object的区别、Scala超类Any、Scala中的AnyVal、AnyUnit、AnyRef 04
1. Scala中的超类Any在Scala中,Any类是所有类的超类,Any有两个子类:AnyVal和AnyRef1.1 AnyValAnyVal是所有值类型的基类,它描述的是值,而不是代表一个对象。它包括9个AnyVal子类型:scala.Doublescala.Floatscala.Longscala.Intscala.Charscala.Shortscala.Byt...原创 2019-05-05 18:41:18 · 956 阅读 · 0 评论 -
Scala中定义数组、增强for遍历scala数组、unitl生成脚标遍历scala数组、数组转换、数组常用算法 05
1 定长数组和变长数组定长数组定义格式:val arr = new Array[T](数组长度)变长数组定义格式:val arr = ArrayBuffer[T]()注意需要导包:import scala.collection.mutable.ArrayBuffer代码如下import scala.collection.mutable.ArrayBufferobje...原创 2019-05-06 19:59:56 · 752 阅读 · 0 评论 -
Scala中面向对象编程之trait下篇、在实例对象指定混入某个trait、trait调用链、混合使用 trait 的具体方法和抽象方法、trait的构造机制、trait 继承 class 14
1. 在实例对象指定混入某个trait可在创建类对象时,为该对象指定混入某个trait,且只混入trait的对象才具有trait中的方法,而其他类的对象则没有;在创建对象时,使用with关键字指定混入某个trait;代码如下trait LoggedTrait{ //该方法为实现的具体方法 def log(msg:String) = {}}trait MyLogger exten...原创 2019-05-19 11:20:56 · 260 阅读 · 0 评论 -
模式匹配和样例类、匹配字符串、匹配类型、匹配数组/元组/集合、样例类、Option类型、偏函数 15
前言Scala有一个十分强大的模式匹配机制,可以应用到很多场合:如switch语句、类型检查等。并且Scala还提供了样例类,对模式匹配惊醒了优化,可以快速进行匹配。1. 匹配字符串import scala.util.Randomobject CaseDemo01 extends App{ val arr = Array("hadoop","zookeeper","spark") va...原创 2019-05-19 18:26:41 · 281 阅读 · 0 评论 -
Scala中的映射、获取映射中的值、getOrElse、Scala中的元组Tuple、创建元组、toMap、拉链操作zip、zipAll 06
1. Scala中的映射构建映射格式val map = Map(键 -> 值,键 -> 值…)利用元组构建 val map = Map((键,值),(键,值),(键,值))scala> val scores = Map("tom" -> 85, "jerry" -> 99, "kitty" -> 90)scores: scala.collect...原创 2019-05-07 09:55:25 · 1068 阅读 · 0 评论 -
Scala中协变C[+T]、逆变C[-T]、非变C[T] 16
1. 协变、逆变、非变简介协变和逆变主要是用来解决参数化类型的泛化问题。Scala的协变与逆变是非常有特色的,完全解决了Java中泛型的一大缺憾;举例来说,Java中,如果有 A是 B的子类,但 Card[A] 却不是 Card[B] 的子类;而 Scala 中,只要灵活使用协变与逆变,就可以解决此类 Java 泛型问题;由于参数化类型的参数(参数类型)是可变的,当两个参数化类型的参数是继承...原创 2019-05-19 18:40:08 · 283 阅读 · 0 评论 -
Scala中的上界、下界 17
前言在指定泛型类型是,有时需要界定泛型类型的范围,而不是接收任意类型。比如,要求某个泛型类型,必须是某个类的子类,这样在程序中就可以放心的调用父类的方法,程序才能正常的使用与运行。此时,就可以使用上下边界Bounds的特性;Scala的上下边界特性允许泛型类型是某个类的子类,或者是某个类的父类;1. 上下届定义注意:Scala中泛型使用A,B,C…Z表示,比如A就是所有类的子类...原创 2019-05-19 18:56:38 · 454 阅读 · 0 评论 -
Scala Actor并发编程、什么是Scala Actor、java并发编程与Scala Actor编程的区别、Java创建线程的4种方法、Actor的执行顺序、Actor发送消息的方式 18
前言Scala Actor是scala 2.10.x版本及以前的版本的Actor,Scala在2.11.x版本中将Akka加入其中,作为其默认的Actor,老版本的Actor已经废弃。1. 什么是Scala ActorScala中的Actor能够实现并行编程的强大功能,它是基于事件模型的并发机制,Scala是运用消息的发送、接收来实现高并发的。Actor可以看做是一个个独立的实体,他们之...原创 2019-05-20 11:02:44 · 362 阅读 · 0 评论 -
Scala中val和var的区别、immutable和mutable的区别 07
val 类似于java中final修饰变量val 修饰的变量,引用地址值不可变。是英文单词value常量的缩写val修饰的变量,.class文件中只有getter()方法,没有setter()方法var 是英文单词variable变量的缩写var 修饰的变量是引用地址值可变。.class文件有getter()和setter()方法,如果修饰引用变量,var person:Per...原创 2019-05-07 19:53:40 · 568 阅读 · 0 评论 -
Scala类的概述、类的定义、主构造器、辅助构造器 09
1. Scala类的定义在Scala中,类并不声明为public类型,Scala源文件中可以包含多个类,所以这些类都具有共有可见性用val修饰的变量是可读属性(引用地址不可变),有getter方法但是没有setter方法(相当于Java中用final修饰的变量)用var修饰的变量既有getter方法,又有setter方法private修饰的字段,只能在类的内部使用或者伴生对象中访问pr...原创 2019-05-10 16:48:35 · 612 阅读 · 0 评论 -
使用Scala的Akka通信编写spark底层通信框架、启动多个Worker、WebSocket的通信过程 28
图解&简单介绍Spark底层通信框架1.1 图解角色分类:老大:Master小弟:Worker启动过程启动Master再启动Worker小弟找老大进行注册小弟要发送心跳,目的:告诉老大,我这个worker还活着老大定时的清除挂掉的超时的Worker。1.2 结合代码分析a --worker 发送注册信息到 masterSSworker 发消息...原创 2019-05-28 16:44:38 · 313 阅读 · 0 评论