![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Scala
动物园园长黄华杰
Python开发/大数据开发
展开
-
Scala常用操作符
scala中的操作符也是类中的方法:++ 从列表的尾部添加另外一个列表++: 在列表的头部添加一个列表+: 在列表的头部添加一个元素:+ 在列表的尾部添加一个元素:: 在列表的头部添加一个元素::: 在列表的头部添加另外一个列表...原创 2019-10-13 19:16:03 · 179 阅读 · 0 评论 -
Spark实现TopN计算
import org.apache.spark.rdd.RDDimport org.apache.spark.{SparkConf, SparkContext}object TopN { def main(args: Array[String]): Unit = { val topN = new SparkConf().setMaster("local[4]").se...原创 2019-09-26 20:06:51 · 1770 阅读 · 0 评论 -
Scala隐式转换与隐式参数
所谓隐式转换,是指以implicit关键字声明的带有单个参数的方法。它是自动被调用的,自动将某种类型转换为另外一种类型。隐式转换的使用步骤:在object中定义隐式转换方法(使用implicit)在需要用到隐式转换的地方,引入隐式转换(使用import)自动调用隐式转化后的方法示例:使用隐式转换,让File具备有readaclass RichFile(val f:File) {...原创 2019-09-24 17:58:26 · 91 阅读 · 0 评论 -
Scala并发编程WordCount案例
WordCount案例接下来,我们要使用Actor并发编程模型实现多文件的单词统计。案例介绍给定几个文本文件(文本文件都是以空格分隔的),使用Actor并发编程来统计单词的数量思路分析实现思路MainActor获取要进行单词统计的文件根据文件数量创建对应的WordCountActor将文件名封装为消息发送给WordCountActorWordCountActor接收消息,...原创 2019-09-22 15:35:35 · 346 阅读 · 0 评论 -
Scala并发编程发送和接收自定义消息
发送和接收自定义消息我们前面发送的消息是字符串类型,Actor中也支持发送自定义消息,常见的如:使用样例类封装消息,然后进行发送处理。示例一示例说明创建一个MsgActor,并向它发送一个同步消息,该消息包含两个字段(id、message)MsgActor回复一个消息,该消息包含两个字段(message、name)打印回复消息[!TIP]使用!?来发送同步消息在Actor...原创 2019-09-22 15:34:24 · 168 阅读 · 0 评论 -
Scala并发编程持续接收消息
持续接收消息通过上一个案例,ActorReceiver调用receive来接收消息,但接收一次后,Actor就退出了。object ActorSender extends Actor { override def act(): Unit = { // 发送字符串消息给Actor2 val msg = "你好,ActorSender" println(s"Actor...原创 2019-09-22 15:33:38 · 136 阅读 · 0 评论 -
Scala并发编程发送和接受消息
发送消息/接收消息我们之前介绍Actor的时候,说过Actor是基于事件(消息)的并发编程模型,那么Actor是如何发送消息和接收消息的呢?使用方式发送消息我们可以使用三种方式来发送消息:!发送异步消息,没有返回值!?发送同步消息,等待返回值!!发送异步消息,返回值是Future[Any]例如:要给actor1发送一个异步字符串消息,使用以下代码...原创 2019-09-22 15:32:56 · 275 阅读 · 0 评论 -
Scala并发编程创建Actor
创建Actor创建Actor的方式和Java中创建线程很类似,也是通过继承来创建。使用方式定义class或object继承Actor特质重写act方法调用Actor的start方法执行Actor[!NOTE]类似于Java线程,这里的每个Actor是并行执行的示例示例说明创建两个Actor,一个Actor打印1-10,另一个Actor打印11-20使用cl...原创 2019-09-22 15:32:15 · 118 阅读 · 0 评论 -
Scala并发编程Actor介绍
Scala并发编程Actor介绍Actor介绍Java并发编程的问题Actor并发编程模型Java并发编程对比Actor并发编程Actor介绍scala的Actor并发编程模型可以用来开发比Java线程效率更高的并发程序。我们学习scala Actor的目的主要是为后续学习Akka做准备。Java并发编程的问题在Java并发编程中,每个对象都有一个逻辑监视器(monitor),可以用来控...原创 2019-09-22 15:31:19 · 195 阅读 · 0 评论 -
Scala泛型协变逆变非变
协变、逆变、非变spark的源代码中大量使用到了协变、逆变、非变,学习该知识点对我们将来阅读spark源代码很有帮助。来看一个类型转换的问题:class Pair[T]object Pair { def main(args: Array[String]): Unit = { val p1 = Pair("hello") // 编译报错,无法将p1转换为p2 ...原创 2019-09-21 20:15:23 · 165 阅读 · 0 评论 -
Scala泛型上下界
上下界需求:我们在定义方法/类的泛型时,限定必须从哪个类继承、或者必须是哪个类的父类。此时,就需要使用到上下界。上界定义使用<: 类型名表示给类型添加一个上界,表示泛型参数必须要从该类(或本身)继承语法格式[T <: 类型]示例示例说明定义一个Person类定义一个Student类,继承Person类定义一个demo泛型方法,该方法接收一个Array参数...原创 2019-09-21 20:09:13 · 302 阅读 · 0 评论 -
Scala正则表达式
正则表达式正则表达式定义示例一示例二示例三正则表达式在scala中,可以很方便地使用正则表达式来匹配数据。定义Regex类scala中提供了Regex类来定义正则表达式要构造一个RegEx对象,直接使用String类的r方法即可建议使用三个双引号来表示正则表达式,不然就得对正则中的反斜杠来进行转义val regEx = """正则表达式""".rfindA...原创 2019-09-21 19:20:26 · 268 阅读 · 0 评论 -
Scala使用match匹配类型
Scala使用match匹配类型// stripMargin表示删除前面的竖线,这样看起来会显得比较整齐val prompt = """ |0:字符串类型 |1:整形 |2:浮点型 |3:Person对象类型 | |请选择: """.stripMarginprintln(prompt)val select = StdIn.read...原创 2019-09-20 19:53:44 · 993 阅读 · 0 评论 -
Scala函数式编程基础
/** * 函数式编程 */object functionProgramming extends App{ val a = List(3, 5, 8, 9, 2) a.foreach(println) a.foreach(println(_)) println("___________________________") private val ...原创 2019-09-17 20:31:22 · 108 阅读 · 0 评论 -
Scala映射常用操作
/** * 映射 */object mapTest extends App{ val map = Map("huajie" -> "jingmin", "huajie" -> "jingmin", "huang" -> "xu") println(map("huajie")) /** * 1. 定义一个映射,包含以下学生姓名和年龄...原创 2019-09-17 20:06:36 · 268 阅读 · 0 评论 -
Scala列表数据类型常用操作
/** * 列表常用操作 */object arrayTest extends App{ val a = List(1, 4, 8, 2, 10) val b = List(7, 4, 8, 5, 10) // 判断列表是否为空 println(a.isEmpty) println("---------") // 拼接两个列表 ...原创 2019-09-17 19:44:09 · 196 阅读 · 0 评论 -
Scala小案例WordCount,附上详细解释
object ScalaTest { def main(args: Array[String]): Unit = { // 定义一个数组 val list = Array("huang hua jie xu jing min hua huang", "jing min wo xi huan ni wo shi huang hua jie") ...原创 2019-09-05 21:04:38 · 327 阅读 · 0 评论