
scala
文章平均质量分 74
java大数据编程
多年互联网一线实战经验,先后任开发工程师、架构师等职位。 精通Java、Python、Shell多种编程语言,对大数据和机器学习都有深入研究。
展开
-
初识scala(一)
Scala(Scala Language的简称)语言是一种能够运行于JVM和.Net平台之上的通用编程语言,既可用于大规模应用程序开发,也可用于脚本编程。本文主要讲解scala简介、特性、编程方式、基本语法、关键字、注释及变量。原创 2018-09-08 19:24:28 · 400 阅读 · 0 评论 -
类和对象(十五)
类是对象的抽象,而对象是类的具体实例。类是抽象的,不占用内存,而对象是具体的,占用存储空间。类是用于创建对象的蓝图,它是一个定义包括在特定类型的对象中的方法和变量的软件模板。Scala中的类不声明为public,一个Scala源文件中可以有多个类。抽象类是一种不能被实例化的类,抽象类中包括了若干不能完整定义的方法,这些方法由子类去扩展定义自己的实现。在Scala中,是没有static的,但是提供了单例模式的实现方法,那就是使用关键字object。原创 2018-09-09 09:16:49 · 201 阅读 · 0 评论 -
特质trait(十六)
scala和java语言一样,采用了很强的限制策略,避免了多种继承的问题。在java语言中,只允许继承一个超类,该类可以实现多个接口,但java接口有其自身的局限性:接口中只能包括抽象方法,不能包含字段、具体方法。Scala语言利用Trait解决了该问题,在scala的trait中,它不但可以包括抽象方法还可以包含字段和具体方法。本文主要内容有简介、简单实例、多种使用方式、构造顺序。原创 2018-09-09 09:20:49 · 273 阅读 · 0 评论 -
正则表达式(十七)
简介 在程序开发中,经常会碰到需要匹配、查找、替换、判断字符串,如果用纯编码方式解决的话,难度较大,而且很浪费时间,通过正则表达式可以解决这些问题。 正则表达式并不只属于某一门程序语言。在众多的编程语言当中,包括JAVA、Perl、PHP、Python、JavaScript和JScript,都无一例外内生地支持正则表达式处理。Scala语言同样支持正则表达式。scala可以直接通过Ja...原创 2018-09-09 09:26:15 · 335 阅读 · 0 评论 -
IO流(十八)
在Scala中,I/O操作是调用java中的I/O类或者通过对java中的I/O类进行相应的封装来实现的。相比于java语言中的I/O类,scala语言中的I/O相关类非常少,而这其中最常用的只有Source这个类。Scala进行文件写操作,直接用的都是java中的I/O类。scala中读文件可以直接使用java中的I/O类,也可以用scala中的Source对象。scala中的网络I/O操作可以通过Source对象中的fromURL方法来实现,也可以使用原生的JAVA网络I/O操作进行。原创 2018-09-09 09:29:39 · 177 阅读 · 0 评论 -
Case Class(十九)
Case Classs是样例类,能够被优化以用于模式匹配。构造器中的参数如果不被声明为var的话,默认是val类型。自动创建伴生对象,实现apply方法,可以不直接显示地new对象。伴生对象实现unapply方法,从而可以将case class应用于模式匹配。实现toString、hashCode、copy、equals方法。本文主要内容有:简介、简单实例、常用方法、多参数的case class、sealed case class。原创 2018-09-09 09:34:06 · 392 阅读 · 0 评论 -
模式匹配(二十)
Scala 提供了强大的模式匹配机制,应用非常广泛。一个模式匹配包含了一系列备选项,每个都开始于关键字 case。每个备选项都包含了一个模式及一到多个表达式。箭头符号 => 隔开了模式和表达式。本文主要内容有简介、模式匹配入门、模式类型、for控制结构中的模式匹配、Option类型模式匹配。原创 2018-09-09 09:37:47 · 196 阅读 · 0 评论 -
提取器Extractor(二十一)
Scala 提取器是一个带有unapply方法的对象。unapply方法算是apply方法的反向操作:unapply接受一个对象,然后从对象中提取值。编译器在实例化对象时会调用 apply 方法。在提取器对象中使用match 语句是,unapply 将自动执行。本文主要内容有简介、简单实例、提取器中使用模式匹配。原创 2018-09-10 08:44:37 · 733 阅读 · 0 评论 -
scala泛型(二十二)
scala中可以使用泛型来修饰类、特质和函数,这样的类、特质和函数可用于操作多种类型数据。比如,Array[T]可以存放指定类型T的数据。本文主要内容有简介、泛型修饰的类、泛型修饰的函数、泛型界定(上边界、下边界、视图边界、上下文边界)。原创 2018-09-10 08:44:21 · 260 阅读 · 0 评论 -
scala隐式转换(二十三)
scala隐式转换分为隐式方法、隐式参数、隐式类及隐式对象。隐式方法:方法命名:文件名为源文件名2目标文件名,例如:file2RichFile定义隐式转换的方法名。隐式参数:在参数前添加implicit关键字的参数。隐式类:在class关键字前带有implicit关键字的类。隐式对象:在object关键字前带有implicit关键字的伴生对象。原创 2018-09-10 08:57:21 · 212 阅读 · 0 评论 -
scala并发编程Actor(二十四)
scala 2.10.x版本及之前使用的是内置的Actor。scala 2.11.x版本后将Akka作为并发编程实现。Akka也实现了类似scala Actor的模型,核心概念也是Actor。scala的Actor类似于Java中的多线程编程,但却有所不同。scala中的Actor尽可能地避免锁和共享状态,避免多线程并发时出现资源争用的情况,进而提升多线程编程的性能。本文主要内容有概述、实现步骤、方法操作、WordCount案例。原创 2018-09-10 09:00:11 · 311 阅读 · 0 评论 -
高阶函数(十四)
高阶函数(Higher-Order Function)就是操作其他函数的函数。Scala 中允许使用高阶函数, 高阶函数可以使用其他函数作为参数,或者使用函数作为输出结果。本文主要内容有简介、简单实例(函数参数、函数作为返回值)、常用高阶函数(map、flatMap、filter、reduce、fold)、函数柯里化、部分应用函数。原创 2018-09-09 09:12:18 · 227 阅读 · 0 评论 -
函数与闭包(十三)
Scala 有方法与函数,二者在语义上的区别很小。Scala 方法是类的一部分,而函数是一个对象可以赋值给一个变量。换句话来说在类中定义的函数即是方法。我们这里会统称为函数。Scala 中的函数是一个继承了 Trait类的对象。函数定义由一个 def 关键字开始,紧接着是可选的参数列表,一个冒号 : 和方法的返回类型,一个等号 = ,最后是方法的主体。本文主要内容有简介、基本函数、函数传名调用、函数指定参数名、可变参数、默认参数值、匿名函数、闭包。原创 2018-09-09 09:06:43 · 372 阅读 · 0 评论 -
集合类之Map(十二)
Map(映射)也叫哈希表(Hash tables),是一种可迭代的键值对(key/value)结构。所有的值都可以通过键来获取。Map中的键都是唯一的。Map有两种类型:可变与不可变。区别在于可变对象可以修改,而不可变对象不可以。默认情况下 Scala 使用不可变 Map。如果使用可变集合,需要显式地引入 import scala.collection.mutable.Map 类。本文主要内容有简介、简单实例、常见操作。原创 2018-09-09 09:02:40 · 309 阅读 · 0 评论 -
数据类型(二)
Scala的基本数据类型与Java中的基本数据类型是一一对应的,不同的是Scala的基本数据类型头字母必须大写。本文主要讲解简介、类型变量定义(整型、浮点型、字符型、字符串、布尔)、类型操作(算术运算、关系运算、逻辑运算、位运算、对象比较)、运算符优先级。原创 2018-09-08 19:29:42 · 222 阅读 · 0 评论 -
包和引入(三)
Scala中的包同java中的包,Scala中的包主要用于大型工程代码的组织同时也解决命名冲突的问题。Scala中的包与java有着诸多的相似之处,但Scala语言中的包更加灵活。Scala 访问修饰符分别有:private,protected,public。如果没有指定访问修饰符符,默认情况下,Scala 对象的访问级别都是 public。Scala 中的 private 限定符,比 Java 更严格,在嵌套类情况下,外层类甚至不能访问被嵌套类的私有成员。原创 2018-09-08 19:32:28 · 225 阅读 · 0 评论 -
程序控制语句(四)
Scala中的程序控制语句主要分为IF...ELSE语句、循环语句及Break语句。Scala IF...ELSE 语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块。循环语句允许多次执行一个语句或语句组,用于需要重复调用某代码块的场景。Scala 语言中默认没有 break 语句,但是在 Scala 2.8 版本后可以使用另外一种方式来实现 break 语句。当在循环中使用 break 语句,在执行到该语句时,就会中断循环并执行循环体之后的代码块。原创 2018-09-08 19:36:20 · 254 阅读 · 0 评论 -
异常处理(五)
scala的方法可以通过抛出异常的方法的方式来终止相关代码的运行,不必通过返回值。Scala 抛出异常的方法和 Java一样,使用 throw 方法,例如,抛出一个新的参数异常:throw new IllegalArgumentException。异常捕捉的机制与其他语言中一样,如果有异常发生,catch字句是按次序捕捉的。因此,在catch字句中,越具体的异常越要靠前,越普遍的异常越靠后。如果抛出的异常不在catch字句中,该异常则无法处理,会被升级到调用者处。原创 2018-09-08 19:38:33 · 205 阅读 · 0 评论 -
集合类概述(六)
scala中的集合分为两种,一种是可变的集合,另一种是不可变的集合。可变的集合可以在原集合上进行添加、更新及删除元素。不可变集合一旦被创建便不能被改变,添加、更新及删除操作返回的是新的集合,老集合保持不变。在scala中,默认使用的都是immutable集合。如果要使用mutable集合,需要在程序中引入。本文主要内容有简介、集合类层次结构、可变集合与不可变集合对应关系。原创 2018-09-08 19:42:59 · 209 阅读 · 0 评论 -
集合类之数组(七)
Scala 语言中提供的数组是用来存储固定大小的同类型元素。声明数组是声明一个就像numbers这样的变量,然后使用 numbers[0]、numbers[1]、...、numbers[99] 来表示一个个单独的变量。数组中某个指定的元素是通过索引来访问的。数组的第一个元素索引为0,最后一个元素的索引为元素总数减1。本文主要内容有简介、声明数组、简单实例(定长数组Array、变长数组ArrayBuffer、数组遍历、数组转换、常用运算、多维数组)。原创 2018-09-08 21:45:35 · 273 阅读 · 0 评论 -
集合之字符串(八)
在 Scala 中,字符串的类型实际上是 Java String,它本身没有 String 类。String 是一个不可变的对象,所以该对象不可被修改。这就意味着你如果修改字符串就会产生一个新的字符串对象。String在操作时可以被隐式转换成StringOps对象,通过StringOps对象给字符串添加了上百种操作。本文主要内容有简介、创建字符串、StringBuilder、简单实例。原创 2018-09-08 21:50:34 · 187 阅读 · 0 评论 -
集合类之List(九)
Scala 列表类似于数组,它们所有元素的类型都相同,但是它们也有所不同:列表是不可变的,值一旦被定义了就不能改变;其次,列表具有递归的结构(也就是链接表结构)而数组不是。构造列表的两个基本单位是Nil和::。Nil可以表示一个空列表。本文主要内容有简介、组成部分、常用操作、伴生对象方法、遍历操作、列表缓存(ListBuffer)。原创 2018-09-08 22:08:56 · 295 阅读 · 0 评论 -
集合类之元组(十)
与列表一样,元组也是不可变的,但与列表不同的是元组可以包含不同类型的元素。元组的值是通过将单个的值包含在圆括号中构成的。元组的实际类型取决于它的元素的类型。目前 Scala 支持的元组最大长度为 22。本文主要内容有简介、常见操作、遍历操作。原创 2018-09-08 22:14:48 · 194 阅读 · 0 评论 -
集合类之Set(十一)
Scala Set是没有重复的对象集合,所有的元素都是唯一的。分为不可变和可变两类。默认情况下,Scala 使用的是不可变集合(默认引用 scala.collection.immutable.Set),如果想使用可变集合,需引用 scala.collection.mutable.Set 包。本文主要内容有简介、简单实例、Set类型、常见操作。原创 2018-09-09 09:01:22 · 227 阅读 · 0 评论 -
一口气读完scala
横空出世 天下武功,唯快不破。在大数据时代下,能够进行快速地数据处理与分析已成为迫切需求。现如今,Spark、Kafka等基于Scala语言实现的框架在大数据生态圈内占有举足轻重的地位,它们在一定程度上引领着大数据最前沿技术方向。 另外Akka、Gearpump等基于Scala语言实现的框架在大数据生态圈内也备受关注,工业实践已经证明了Scala语言的强大。这使Scala语言近一两...原创 2018-09-10 09:03:01 · 755 阅读 · 1 评论