
Scala
张博208
知识搬运工
展开
-
漫谈并发编程:Actor模型
0x00 前言一般来说有两种策略用来在并发线程中进行通信:共享数据和消息传递。熟悉c和java并发编程的都会比较熟悉共享数据的策略,比如java程序员就会常用到java.util.concurrent包中同步、锁相关的数据结构。使用共享数据方式的并发编程面临的最大的一个问题就是数据条件竞争(data race)。处理各种锁的问题是让人十分头痛的一件事。和共享数据方式相比,消息传递机制...转载 2020-01-08 09:33:30 · 309 阅读 · 0 评论 -
浅谈Actor并发模型
https://blog.youkuaiyun.com/qq_24598059/article/details/99888274原创 2020-01-08 09:29:34 · 142 阅读 · 0 评论 -
卡尔曼(Kalman)滤波(四)--深入浅出Kalman滤波算法
Kalman滤波是一种递归过程,主要有两个更新过程:时间更新和观测更新,其中时间更新主要包括状态预测和协方差预测,主要是对系统的预测,而观测更新主要包括计算卡尔曼增益、状态更新和协方差更新,因此整个递归过程主要包括五个方面的计算:1)状态预测;2)协方差预测;3)卡尔曼增益;4)状态更新;5)协方差更新; 用数学公式表示,如下:状态预测: (1)其中,X(k|k)是k时刻...转载 2018-06-28 11:16:06 · 3446 阅读 · 1 评论 -
自身类型(self type)引用
定义特质可以要求混入它的类扩展自另一个类型,但是当使用自身类型(self type)的声明来定义特质时(this: ClassName =>),这样的特质只能被混入给定类型的子类当中。 如果尝试将该特质混入不符合自身类型所要求的类时,就会报错。从技术角度上看,自身类型是在类中提到this时,对于this的假设性类型。从实用角度上看,自身类型指定了对于特质能够混入的具体类的需求。如果你的特质仅...转载 2018-06-28 13:58:41 · 1441 阅读 · 0 评论 -
Scala基础 - 传名参数和传值参数(by-name/by-value parameter)
1. 介绍传值参数在函数调用之前表达式会被求值,例如Int,Long等数值参数类型;传名参数在函数调用前表达式不会被求值,而是会被包裹成一个匿名函数作为函数参数传递下去,例如参数类型为无参函数的参数就是传名参数。下文将举例说明这两者的区别。2. 简单类型的传递示例2.1 传值参数(by-value parameter)示例在下面的示例中,编译器检测到strToInt接受一个传值参数,所以先对传入的...转载 2018-07-12 16:06:46 · 426 阅读 · 0 评论 -
逆变点与协变点
这个问题来自之前这篇scala类型系统:15) 协变与逆变的评论里的问题遇见一个这样的问题class In[+A]{ def fun(x:A){} }会提示error: covariant type A occurs in contravariant position in type A of value xclass In[+A]{def fun(x:A){}} ...转载 2018-07-12 19:15:26 · 279 阅读 · 0 评论 -
scala中:: , +:, :+, :::, +++的区别
4种操作符的区别和联系 :: 该方法被称为cons,意为构造,向队列的头部追加数据,创造新的列表。用法为 x::list,其中x为加入到头部的元素,无论x是列表与否,它都只将成为新生成列表的第一个元素,也就是说新生成的列表长度为list的长度+1(btw, x::list等价于list.::(x)) :+和+: 两者的区别在于:+方法用于在尾部追加元素,+:方法用于在头部追加元素,...转载 2018-09-13 10:39:26 · 214 阅读 · 0 评论 -
Scala 方法和函数
scala 方法和函数方法的定义:def add(x:Int):Int=>Int=x=>x+2def isDivisibleBy(k:Int):Int=>Boolean=i=>i%k==0省略形式:def add:Int=>Int=x=>x+2def add(x:Int):Int=x+2def add(x:Int)=x+2def ...原创 2019-01-27 12:56:09 · 133 阅读 · 0 评论 -
Custom UDF in Apache Spark
Apache Spark has become very widely used framework to build Big data application. Spark SQL has made adhoc analysis on structured data very easy, So it is very popular among users who deal with huge a...转载 2019-02-01 18:07:40 · 259 阅读 · 0 评论 -
scala类型系统:7) 中缀类型
https://blog.youkuaiyun.com/jiangpeng59/article/details/53096004转载 2019-03-17 12:19:10 · 203 阅读 · 0 评论 -
Scala基础入门(九)Scala 方法中缀表示法、后缀表示法
Scala 编程规范中,有一些很有意思的规则。合理地使用这些规则,可以帮助我们编写更简洁更有效的代码。Scala 方法调用一般来说,Scala中的方法调用遵循Java惯例。换句话说在目标方法和点符(.)之间是没有任何间隙的,并且最好遵循参数之间用逗号隔开,后面的参数与前面参数后面的逗号应该存在一个空格。调用target的foo方法示例如下:foo(42, bar) target.fo...转载 2019-03-17 12:21:46 · 376 阅读 · 0 评论 -
Scala泛型、隐式转换和隐式参数、视图介绍、Scala中的上界、下界、结合柯里化进行隐式转换
二、泛型一、Scala泛型 1. 泛型介绍 泛型用于指定方法或类可以接受任意类型参数,参数在实际使用时才被确定,泛型可以有效地增强程序的适用性,使用泛型可以使得类或方法具有更强的通用性。泛型的典型应用场景是集合及集合中的方法参数,可以说同java一样,scala中泛型无处不在,具体可以查看scala的api。 2. 泛型类、泛型方法 泛型类:指定类可以接受任意类型参数。 泛型方法:指定方法可以接受...转载 2018-06-27 15:56:51 · 167 阅读 · 0 评论 -
Scala学习——泛型[T]的6种使用(初)
package com.dtspark.scala.basics/** * 1,scala的类和方法、函数都可以是泛型。 * * 2,关于对类型边界的限定分为上边界和下边界(对类进行限制) * 上边界:表达了泛型的类型必须是"某种类型"或某种类型的"子类",语法为“<:”, * 下边界:表达了泛型的类型必须是"某种类型"或某种类型的"父类",语法为“>:”, * * 3, "&l转载 2018-06-27 15:51:10 · 176 阅读 · 0 评论 -
Scala 高级类型
高级类型«PreviousNext»课程内容:视界 (“类型类”)其他类型限制更高级多态性类型 和 特设多态性F-界多态性 / 递归类型结构类型抽象类型成员类型擦除和清单案例分析: Finagle视界(“类型类”)有时候,你并不需要指定一个类型是等/子/超于另一个类,你可以通过转换这个类来伪装这种关联关系。一个视界指定一个类型可以被“看作是”另一个类型。这对对象的只读操作是很有用的。*隐式*函数允...转载 2018-06-27 15:44:39 · 445 阅读 · 0 评论 -
异常点检测算法isolation forest的分布式实现
无监督领域有一个准度和效率双佳的异常点检测算法,我在实践中使用过几次,效果奇好,就是最近几年非常流行的isolation forest(孤立森林)。该算法在sklearn中有现成的包,但是如果大数据的集群上跑的话,目前没有封装好的接口,给分布式任务的部署带来了很多不便(话说spark mllib中集成的算法真心太少了),本文用scala从头进行该算法在spark上的分布式实现,并演示任务在集群上的...转载 2018-05-13 17:51:57 · 1210 阅读 · 0 评论 -
Scala 中的隐式转换和隐式参数
隐式定义是指编译器为了修正类型错误而允许插入到程序中的定义。举例:正常情况下"120"/12显然会报错,因为 String 类并没有实现 / 这个方法,我们无法去决定 String 类的行为,这个时候就可以用上 implicit 关键字了。使用 implicit 关键字定义函数。implicit def String2Int(str: String) = { str.toInt}print...转载 2018-06-05 09:23:56 · 214 阅读 · 0 评论 -
Spark2.0机器学习系列之11: 聚类(幂迭代聚类, power iteration clustering, PIC)
在Spark2.0版本中(不是基于RDD API的MLlib),共有四种聚类方法: (1)K-means (2)Latent Dirichlet allocation (LDA) (3)Bisecting k-means(二分k均值算法) (4)Gaussian Mixture Model (GMM)。...转载 2018-05-30 17:47:17 · 947 阅读 · 0 评论 -
scala 传值参数和传名参数 ():=>和:=>
传值参数代码示例:def test1(code: ()=>Unit){ println("start") code() //要想调用传入的代码块,必须写成code(),否则不会调用。 println("end") } test1 {//此代码块,传入后立即执行。 println("1111") ()=>{println("2222...转载 2018-06-29 14:22:17 · 391 阅读 · 0 评论 -
Scala Cookbook
Scala Cookbookfor(i<-Array(1,2,3)) println(i) / 遍历//for yieldfor(i<-Array(1,2,3)) yield i*2Array(1,2,3).map(_*2)val nums=List(1,2,3,4,5).filter(_<4)val nums=List(1,2,3,4,5).filter(_<4).map...原创 2018-06-11 09:28:33 · 328 阅读 · 0 评论 -
Scala之类型参数化:Type Parameterization
Scala之类型参数化:Type ParameterizationScala之类型参数化Type Parameterization型变Variance不变 Invariant协变Covariant逆变Contravariant类型参数的边界控制下界Lower Bound上界Upper Bound视界View Bound上下文边界Context Bound型变:Variance型变试图在规范和回答这...转载 2018-06-26 10:19:04 · 207 阅读 · 0 评论 -
Scala中的协变,逆变,上界,下界等
目录 [−]Java中的协变和逆变Scala的协变Scala的逆变下界lower bounds上界upper bounds综合协变,逆变,上界,下界View Bound <%Context Bound参考文档Scala中的协变逆变和Java中的协变逆变不一样,看起来更复杂。 本文对Scala中的这些概念做一总结。首先看几个概念:covariant 协变。使你能够使用比原始指定的类型的子类Co...转载 2018-06-19 15:42:33 · 228 阅读 · 0 评论 -
Scala:Function1、Function2
Function1带一个参数的方法,声明时,它需要两个泛型参数,第一个是传入的数据类型,第二个表示返回的数据类型,Function1是 trait ,它有一个apply方法,用来对输入参数进行处理了,使用Function1,必须实现apply接口val funs = new Function1[Int,Int] { def apply(x:Int) = { x + 1 }}/...转载 2018-06-27 15:09:48 · 2110 阅读 · 0 评论 -
Scala中的偏函数与部分应用函数
Scala中有PartialFunction的概念, 同时还要一个概念叫Partial Applied Function. 前者译作偏函数, 后者译作"偏应用函数"或"部分应用函数", 一字之差, 差距很大.首先偏函数是个数学概念, 偏函数不是"函数"的一种, 而是一个跟函数平行的概念. Scala可以通过模式匹配来定义偏函数, 下面这两种方式定义的函数, 都可以认为是偏函数, 因为他们都只对其...转载 2018-06-27 15:16:32 · 382 阅读 · 0 评论 -
模式匹配与函数组合
课程内容:函数组合composeandThen柯里化 vs 偏应用偏函数 PartialFunctions范围和域 range and domain使用orElse进行组合case 之谜函数组合让我们创建两个函数:scala> def f(s: String) = "f(" + s + ")"f: (String)java.lang.Stringscala> def g(s: S...转载 2018-06-27 15:34:44 · 183 阅读 · 0 评论 -
scala中为什么不建议用return
scala中为什么不建议用return在scala中使用return的话,编译的时候会提示the latest statement is method is automatically returned, use of th return keyword is redundant.这个警告是说最后一个语句的结果会自动返回,不需要使用return语句。 scala不建议使用return关键字,这一点...转载 2018-05-17 14:21:31 · 862 阅读 · 0 评论