专为大规模数据处理而设计的快速通用的计算引擎,并形成一个高速发展应用广泛的生态系统
二.特点速度快:内存计算下,Spark 比 Hadoop 快100倍
易用性:跨语言,拥有80多个高级运算符
通用性:Spark 提供了大量的库,开发者可以在同一个应用程序中无缝组合使用这些库
支持多种资源管理器:Spark 支持 Hadoop YARN,Apache Mesos,及其自带的独立集群管理器
生态组件丰富与成熟: spark streaming:实时数据处理
shark/sparkSQL:用sql语句 *** 作spark引擎
sparkR:用R语言 *** 作Spark
mlib:机器学习算法库
graphx:图计算组件
四.Scala 4.1介绍
多范式(multi-paradigm)的编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性。
运行在 Java虚拟机上,并兼容现有的 Java程序。
源代码被编译成 Java字节码文件,运行于 JVM之上,并可以调用现有的 Java类库。
面向对象:纯面向对象语言,每个值都是对象
函数式编程:函数式语言,其函数也能当成值来使用。
提供了轻量级的语法用以定义匿名函数,支持高阶函数,
允许嵌套多层函数,并支持柯里化。
静态类型:具备类型系统,通过编译时检查,保证代码的安全性和一致性
扩展性:提供了许多独特的语言机制,可以以库的形式轻易无缝添加新的语言结构
并发性:其并没有在底层对语言的并发性做更新升级
使用 Actor作为其并发模型
object hello { def main(args: Array[String]): Unit= { println("hello World") } }4.4应用前景
技术层面:完全兼容 Java,运行于 JVM虚拟机之上
支持函数式编程和类型推断
结合面向过程和面向对象,并保证代码简洁及优雅
开发工具 IDE非常成熟
应用层面:linkedIn/Twitter/英国卫报等众多企业已全面生产应用 Scala,或替换 Java代码
spark/kafka等大数据开发组件的巨大爆发力,使 Scala为国内所热捧
对象:类的一个具体实例,对象包含属性和方法,如旺财有属性毛色和看家本领能力
类:类是对象的抽象,对象是类的一个实例
方法:描述类所拥有的行为能力,一个类可以拥有多个方法
属性:也称字段,即每个对象拥有它自身实例变量集合,通过赋值来创建真正的属性值
区分大小写
类名:首字母要大写,如 class HelloWorld{}也称大驼峰
方法名称:首字母小写,从第 2个单词开启的首字段大写,如def toString(),即为小驼峰
程序文件名:保持与类名或对象名一致,区分大小写,以".scala"来结尾
主程序入口:defm ain(args:A rray[S tring]),scala若要独立运行必须从main方法开始处理,每个scala强制程序入口
兼容java标识符命名规范
多符号命名:可以加入"$,+,++,<"等符号参与命名,注意首字符和尾字符的若干限制,如"$"不要作为开头,"_"不要作为结尾。
有新增关键字,如 yield成为scala新关键字,则在scala调用时,则应由Thread.yield()改成Thread.'yield'来使用
4.5.5换行符
末尾的";"是可选的
如果一行中包括多个语句,则必须用";"来分隔
与Java相似部分(皆为对象类型,scala无原生数据类型)
Byte,Short,Int,Long,Float,Double,Char,String,Boolean
差异部分:Unit:即为空值或无值,与 Java中的 void等同
Null:即为 null,即空引用
Nothing:是任何类型的子类型,在 scala类层级的最末端
Any:是所有其它类的基(父)类
AnyRef:是所有引用类的基础,即除了值类型之外
AnyVal:是所有值类型的基类,包括 9个值类型
使用var来声明变量
显式声明类型var variableName : DataType [= Initial Value]
val constName: DataType [= Initial Value]
隐式声明类型var myString="HelloWorld";
var myInt=1;
批量变量声明var a,b=10;
scala访问修饰符包括private,protected,public,对象的访问级别默认都是public
private:仅在包含了成员定义的类或对象内部可见,在嵌套类情况下,外层类甚至不能访问被嵌套类的私有成员
protected:比java的protected更严格,除了子类可以访问,同包下的类是不能访问的
4.9运算符
4.10控制语句
4.10.1if...else
object TestIfElse { def main(args: Array[String]): Unit = { var age = 15; if (age < 18){ println("未成年") }else{ println("已经成年了") } } }
4.10.2while循环
object TestWhile { def main(args: Array[String]): Unit = { var begin = 10; var end = 20; while (begin < end) { println(begin) begin = begin +1 } } }
4.10.3for循环
object TestFor_to { def main(args: Array[String]): Unit = { var i =10 var j =90 for (x <- i to j){ println(x) } } }
object TestFor_Unitl { def main(args: Array[String]): Unit = { var i =10 var j =90 for (x <- i until j){ println(x) } } }
object TestFor_Double { def main(args: Array[String]): Unit = { var end = 5; var begin = 1; for(x <- begin to end;j <- begin to end){ println(x+"*"+j) } } }
object TestFor_List_And_Filter{ def main(args: Array[String]): Unit = { val stringList = List("one","two","three","four","five","six"); for(str <- stringList if(str!="two" && str!="three")){ println(str) } } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)