29scala公开课-大数据_第1页
29scala公开课-大数据_第2页
29scala公开课-大数据_第3页
29scala公开课-大数据_第4页
29scala公开课-大数据_第5页
已阅读5页,还剩56页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

大数据公开课-Scala基础讲师:满一航大数据交流群:375774867什么是Scala 作者MartinOdersky一门可伸缩的语言与Java无缝结合简单有趣面向对象函数式函数即对象编程环境scalashelleclipseintellijidea一门可伸缩的语言即可作为脚本语言也可以作为企业应用例如脚本hello.sh内容如下:可以执行:与java无缝结合scala代码最终被编译为class(java字节码),加载至java虚拟机运行也就是说,scala的类可以被java所使用,反之亦然研究scala时,可以利用一些反编译工具,查看scala编译器生成的字节码语法基础变量vara=10常量valb=100表达式1+100if(a>0)"ok"else"notok"语法基础方法定义def方法名(参数:类型):返回类型={表达式;表达式}例如:注意:如果只有一个表达式,那么{}可以省略方法中最后一个表达式作为该方法的返回值定义函数时,如果根据表达式能够确定返回值类型,那么不需要声明它基本语法常用类型String消除转义StringContextInt,Long,Double...Range,TupleList,Set,Mapscala喜欢省略(1)对象方法没有参数时scala喜欢省略(2)对象方法仅有一个参数时比如之前见过的Range类型1是Int类型有to方法,接收10这个参数,返回一个类型为Range的对象随意的方法名可以使用!,++,?等有趣的字符作为方法名例:List的方法::::++:这里有一个约定,最后一个字符是【:】的方法是右结合的,即:List(1,2):::List(3,4)=List(3,4).:::(List(1,2))=List(1,2,3,4)1+:List(2,3)=List(2,3).+:(1)=List(1,2,3)面向对象比java更简单caseclass的背后(1)caseclass的背后(2)已经实现了很多方法...caseclass适用场景可以用于模式匹配trait应该说java8里的接口,模仿了scala中的traittrait中不仅可以定义抽象方法,也可以定义方法实现:trait注意:scala中要重写方法,需要显式使用override关键字traittrait实现多继承的原理:scala喜欢在编译期做手脚traitPerson的方法内,实际调用的是抽象类中的静态方法实现函数是一等公民Scala中的匿名函数:(参数:类型)=>{表达式;表达式}函数在Scala中最后会被解析为一个对象,这就意味着,它可以作为参数或是返回值其他接收函数作为参数的方法,或是将函数作为返回值的方法,称之为高阶函数(HigherOrderFunctions)函数怎么变成对象的下面这个匿名函数其实是一个对象varfunc0=(x:Int)=>println("ok")它会被翻译成:objectfunc0extendsFunction1[Int,Unit]{defapply(x:Int)=println("ok,"+x);}调用func0实际就是调用了func0对象的apply方法func0(1)其实就是func0.apply(1)只是【.apply】被省略了高阶函数先来看看高阶函数的威力:已存在一个数字集合,按照奇偶数分成两个集合,下面是java的实现高阶函数再看Scala实现:partition就是Scala集合中提供的高阶函数,像这样的高阶函数,还有很多几个重要的高阶函数map(f:A=>B)将集合中的元素由A类型转换为B类型reduce(op:(A,A)=>A):A将op函数的运算结果与下一个元素进行运算,假设元素有a,b,c,dop(a,b)op(op(a,b),c)op(op(op(a,b),c),d)groupBy(f:A=>K)将元素按照f函数返回结果进行分组几个重要的高阶函数filter(f:A=>Boolean)将集合中的元素按f函数过滤,f返回为真时保留flatMap(f:A=>GenTraversableOnce[B])将集合中的每个元素转换为一个seq,最后连接所有的seq至一个大集合一个经典的例子单机版的wordcount一个经典的例子单机版的wordcount现在来体会函数式编程的一个重要思想程序应当被分解为多个小的函数,每个函数来处理一个特定任务Scala的学习资料《快学Scala》《ProgramminginScala》提问时间大数据公开课-Scala应用讲师:满一航Scala技术栈面向web应用面向分布式应用面向大数据应用测试Web框架Web框架分布式框架大数据框架测试框架我们重点来看看并发和分布式的Scala知识并发基础不可变性WordCount变为并发Actor模型WordCount变为分布式并发基础future学过java的同学都很了解Executor和Future对象了但让我们来比较一下scala中来完成一件长时间运算的代码:为什么说函数式编程中不可变(immutable)是重要的让wordCount变成并发回忆之前的wordCount程序,如果希望让它变为并发版本,只需要:分析一下reduce操作单线程分析一下reduce操作并行集合只是看起来很好但在实际应用中,单机的处理能力有限,因为cpu核数的限制,在线程达到某一数目时,并不能进一步提高并行率从单机走向分布式分布式编程相对而言比较复杂底层涉及到socket通信、对象序列化、远程调用等多种技术scala中有Akka框架帮我们处理这些底层技术,可以让程序员专注于分布式的业务逻辑什么是ActorActor:将通信抽象为消息发送和接收Actor的特点轻量复用线程使用Actor带构造参数的ActorActor发送消息的两种模式第一种,前面helloWorld例子使用的模式称为Tell(Fire-forgot)

它是首选的消息发送模式,因为不需要阻塞等待回应消息,具有最好的并发性能第二中,称为Ask(Send-And-Receive-Future)

不同之处在于它不仅将消息发送出去,还需要等待对方的应答。由于使用了Future接口,发送消息并不会被阻塞Ask模式必须在两个Actor之间进行Ask示例Ask示例(续)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论