Scala语言
scala2.10兼容的spark是1.6
scala2.11兼容的spark是2.x
spark底层源码就是scala来写的
①Scala语言是一门类似Java的多范式语言,它就是在Java基础上发展起来的。
scala是基于JVM的语言,是运行于Java虚拟机之上的,可以兼容现有的所有Java程序
scala可以和Java无缝整合。即可以在scala中调用java的包和类;在java编程时,也可以调用scala中的包和类
理论上来说,基于JVM的语言全都可以互相调用,就看有没有提供这种转换方式
也因为scala与java的兼容,使得Hadoop和Spark能够实现很好的融合(Hadoop是基于Java生态的,Spark是基于Scala的)。Hadoop在2005-2015年这十年的时间里已经统治了整个大数据的江湖
②Scala是一门纯粹的面向对象的编程语言
甚至3和5也都是对象,3+5其实是3.add(5)
③Scala是一门函数式语言
Scala整合了两种编程范式的风格。既支持面向对象编程风格,也支持函数式的编程风格,是一种混合的编程范式。
运行Scala程序的方法
①交互式环境执行
退出命令行 :quit
查看scala版本
scala -version
②load导入脚本,一次运行多个程序
③通过编译打包的方法运行Scala程序
:是把两个路径组合在一起
新建Scala项目
新建个包com.scala
可见scala中类和对象是不一样的
对象
类
scala object相当于java中的单例,object中定义的全是静态的
object可以理解为是java中的工具类,工具类里都是静态的
main方法必须要写在object里面,才可以运行
package com.scala object scala_obj { def main(args: Array[String]): Unit = { println("hello world") } }
scala每行后面都会有分号自动推断机制,不用显式写出";"
Scala的基本数据类型和变量
Noting是类型推断推不出来的时候
要注意的是,在整个Scala当中,我们所定义的这些类型都是类
Int类型实际上是scala.Int类
还有一个比较特殊的地方,整个Scala当中String类型没有自己的定义,它是完全直接从Java当中照搬过来的,用java.lang.String这个类来表示字符串
运算符
字面量
操作符定义成方法
富包装类
当用到富包装类里面有的操作时,Scala会自动地隐式地把当前类转换成富包装类
scala类型自动推断
scala定义变量只有val和var
val是定义常量,var是定义变量
定义的形式就是 val a = 100, var b = 200
不需要也不能写变量的类型,scala会自动推断
输入输出和控制结构
输入输出
Scala支持C语言风格格式化字符串
因为
Scala是区分大小写的
插值字符串
只要出现“$+变量名”就会在这个位置用变量值来替换这个地方
f字符串可以用来控制格式,s字符串不行
读写文件
如果在/home/hadoop目录下启动scala,test.txt就需要被放在这个目录下