文档介绍:该【scala课堂笔记 】是由【lajie】上传分享,文档一共【5】页,该文档可以免费在线阅读,需要了解更多关于【scala课堂笔记 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。scala课程笔记
1)2天时间scala语言
2)6天时间spark,core,RDD,streaming,sql,mlib
java缺点:
1)操作CPUcore,java不能
2)java语言动态变量,Personp(栈区)=newPerson();(对象实体,堆区)变量是可以修
改的。静态设计,所有的“变量”不允许修改。final常量,只能赋值一次。hadoop中
间结果
3)多线程,难操作,对于初级程序员不敢触碰,企业中也不敢采用你的代码
4)并发
scala:
1)可以直接操作core,spark资源把每个物理机core作为最小单元
2)hadoop中间计算结果值落地,需要调用这个中间结果集,还要从磁盘读出。scalaval常
量,每一步操作都会产生新的常量,中间结果在内存中,下一步计算要利用这个中间结
果,直接从内存中调用。
3)(xxx)。加了这个partition函数它就自动形成分布式而且是高并发,会自动调用
所有可以使用资源。
分布式高并发,操作单机和操作分布式环境代码一样
Java和scala有没有关系?
.java源文件=>=>JVM中执行
.scala源文件=>=>JVM中执行
JVM开发者就是scala的开发者
衍生出来很多好处:
1)scala能不能调用java的代码,完全支持import
2)scala不是自己的相关东西,而是利用JVM执行,野心。java的程序员可以无缝衔接
业界说法:scala是java的高级部分,scala是下一代java。
,抄袭scala
为什么要学****scala?
1)spark是scala开发
2)kafka也是用scala开发的
scala运行环境
1)window环境scala-,换默认路径,命令窗口(scala支持交互式)
直接看到每一步结果(简单测试练****br/>2)IDE,ScalaIDEbuildofEclipseSDK
可以提升错误(比较复杂代码,在spark上执行job)
需求:
helloworld
java:(“helloworld”);
scala:println(“helloworld”)[;]//可以有分号,也可以没有分号,如果一行有多条代码
就必须加,只是一行可以忽略
数组
java:Arraya=newArray(1,2,3,4,5);//定义是一个变量
scala:vala=Array(1,2,3,4,5)//定义是一个常量,可以忽略new关键字
语法:
publicvoidsaveItem(Itemitem){}
scala:saveItem(item:Item):Unit={}
publicList<Item>findItemList(Itemitem){}
scala:findItemList(item:Item):List[Item]={}
java面向对象,万物皆对象,对象属性,对象方法
publicstaticvoidmain(String[]args){
("HelloWorld!");
}
scala完全(纯)面向对象,万物皆函数,对象,对象属性,对象方法,函数,变量,常量
方法
defmain(args:Array[String]):Unit={
println("helloworld")
vala=Array(1,2,3,4,5)
for(x<-a){
println(x)
}
}
var变量和val常量
1)在java声明变量声明最多的,很少使用常量
2)在scala声明常量声明最多多,几乎不用变量
scala会自动推演变量当前值
vala=“123”;
valb=123;//常量,只能一次赋值,和java中的final类似
java中,Array变量
scala中,Array常量,ArrayBuffer变量,必须import
List常量,ListBuffer变量,必须import
java中声明一个final类型常量
1)立即设置初始值(立刻分配内存空间)
2)不设置初始值,后期再赋值(但第一次调用时分配内存空间)
单例设计模式
饿汉式(立即分配内存空间)
懒汉式(第一调用时分配内存空间)
Option(Some,None,默认值getOrElse)
objectApp{
defmain(args:Array[String]):Unit={
println(div(10,2).getOrElse(0))//Some(5),返回就是5
println(div(10,0).getOrElse(0))//None,返回特殊值0
}
//定义整除
defdiv(x:Int,y:Int):Option[Int]={
if(y==0)NoneelseSome(x/y)
}
}
在java中创建对象class
在scala中创建对象Object,class
Object单例,全局唯一
static+final
privatestaticfinalObjectMapperMAPPER=newObjectMapper();//
匿名函数
((n:Int)=>(n%2==0))
方法:defadd={}
函数:(n:Int)=>(n%2==0),没有名称,匿名函数
函数式编程超越面向对象编程,核心
partition(fn)
把一个函数作为参数传递
只有特殊一类函数才可以作为方法参数,高级函数
scala类
1)Object单一实例staticfinal类,单例模式(推荐,main入口执行方法)
2)Class和java的类一样
3)CaseClass样例类,直接序列化,toString,hashCode。。。。很多方法直接实现(网络传
输)
4)Trait接口和抽象类(抽象类抽象接口)
java面向对象编程OP/OOP
scala函数式编程FP+面向对象编程OP
Java中
Array在内存中是连续存储,查询速度快
List在内存中链式存储,不是连续空间,插入元素快
Tuple
1)类似map,但是它的值可以很多,每个的值类型可以不同
2)元素个数是有限制的,22个
3)SparkSQL,利用Tuple元祖将数据库的数据转换成DataFrame(Oracle数据导入到spark
中)
多线程par方法
1)如果在单机上,利用多线程来模拟
2)如果在集群环境,操作的CPUcore为node,把任务平均分配给各个node
3)开发单机版的和集群版的程序代码基本上是一样(注意开发的细节几乎一样)