scala课堂笔记.pdf
scala 课程笔记 1)2 天时间 scala 语言 2)6 天时间 spark,core,RDD,streaming,sql,mlib java 缺点:1)操作 CPU core,java 不能 2)java 语言动态变量,Person p(栈区)=new Person();(对象实体,堆区)变量是可以修改的。静态设计,所有的“变量”不允许修改。final 常量,只能赋值一次。hadoop 中间结果 3)多线程,难操作,对于初级程序员不敢触碰,企业中也不敢采用你的代码 4)并发 scala:1)可以直接操作 core,spark 资源把每个物理机 core 作为最小单元 2)hadoop 中间计算结果值落地,需要调用这个中间结果集,还要从磁盘读出。scala val 常量,每一步操作都会产生新的常量,中间结果在内存中,下一步计算要利用这个中间结果,直接从内存中调用。3)array.par(xxx)。加了这个 partition 函数它就自动形成分布式而且是高并发,会自动调用所有可以使用资源。分布式高并发,操作单机和操作分布式环境代码一样 Java 和 scala 有没有关系?.java 源文件=编译.class 文件=JVM 中执行.scala 源文件=编译.class 文件=JVM 中执行 JVM 开发者就是 scala 的开发者 衍生出来很多好处:1)scala 能不能调用 java 的代码,完全支持 import 2)scala 不是自己的相关东西,而是利用 JVM 执行,野心。java 的程序员可以无缝衔接 业界说法:scala 是 java 的高级部分,scala 是下一代 java。java1.8 引入函数式编程,抄袭 scala 为什么要学习 scala?1)spark 是 scala 开发 2)kafka 也是用 scala 开发的 scala 运行环境 1)window 环境 scala-2.11.7.msi,换默认路径,命令窗口(scala 支持交互式)直接看到每一步结果(简单测试练习)2)IDE,Scala IDE build of Eclipse SDK 可以提升错误(比较复杂代码,在 spark 上执行 job)需求:hello world java:System.out.println(“hello world”);scala:println(“hello world”);/可以有分号,也可以没有分号,如果一行有多条代码就必须加,只是一行可以忽略 数组 java:Array a=new Array(1,2,3,4,5);/定义是一个变量 scala:val a=Array(1,2,3,4,5)/定义是一个常量,可以忽略 new 关键字 语法:public void saveItem(Item item)scala:saveItem(item:Item):Unit=public List findItemList(Item item)scala:findItemList(item:Item):ListItem=java 面向对象,万物皆对象,对象属性,对象方法 public static void main(String args)System.out.println(Hello World!);scala 完全(纯)面向对象,万物皆函数,对象,对象属性,对象方法,函数,变量,常量 方法 def main(args:Array String):Unit=println(hello world)val a=Array(1,2,3,4,5)for(x(n%2=0)方法:def add=函数:(n:Int)=(n%2=0),没有名称,匿名函数 函数式编程超越面向对象编程,核心 partition(fn)把一个函数作为参数传递 只有特殊一类函数才可以作为方法参数,高级函数 scala 类 1)Object 单一实例 static final 类,单例模式(推荐,main 入口执行方法)2)Class 和 java 的类一样 3)Case Class 样例类,直接序列化,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)如果在集群环境,操作的 CPU core 为 node,把任务平均分配给各个 node 3)开发单机版的和集群版的程序代码基本上是一样(注意开发的细节几乎一样)