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)