Scala: 1,基于JVM的FP(Functionnal Programming函数式编程)和OO(Object-Oriented面向对象)语言
2,静态类型语言
3,和Java可以互操作
变量声明: var x:Int = 7
var x=7 //自动类型推导
val y = "hi" //只读,相当于Java中的final
var:variable,变量 val:只读变量,线程安全
函数: def square(x:Int) : Int = x*x
def square(x:Int) : Int = {x*x} //在block中的最后一个值将被返回
def anounce (text:String) {println(text)}
泛型: var arr = new Array[Int](8)
var lst = List(1,2,3) //lst的类型是List[Int]
索引访问: arr(5) = 7 println(lst(1)) //注意与Java中的[],()用处不同
FP的方式处理集合: val list = List(1,2,3)
list.foreach(x=>println(x)) //打印出1,2,3
list.foreach(println) //只有一个参数时,可以省略
list.map(x=>x+2) //List(3,4,5)
list.map(_+2) //_代表list中的每个元素
list.filter(x=>x%2==1) //List(1,3)
list.filter(_%2==1)
list.reduce((x,y)=>x+y) //6
list.reduce(_+_)
Scala闭包: (x:Int) => x+1
x => x+1
_+1
x => {
val numberToAdd = 1
x+numberToAdd
}
//如果闭包很长,可以考虑作为参数传入
def addOne(x:Int) : Int=x+1
list.map(addOne)
------------------------------------------------------------------------------------------------------------------------------------------------------------------


ps:每一个application,在每一个Worker Node上都有一个Executor进程
核心抽象:RDD(Resilient Distributed Dataset)
1,A list of partitions
2,A function for computing each split
3,A list of dependencies on other RDDs
4,Optionnally,a partitioner for key-value RDDs
5,Optionnally,a list of preferred locations to compute each split on
如何创建RDD:
1,直接从集合转化
sc.parallelize(List(1,2,3,4,5,6,7,8,9))
2,从各种(分布式)文件系统来
sc.textFile("READEME.md") sc.textFile("hdfs://xxx")
3,从现存的任何Hadoop InputFormat而来
sc.hadoopFile(key Class ,value Class ,inputFormat ,conf)

