大數據系列第五課:scala基礎

第一階段:Spark streamingspark sqlkafkaspark內核原理(必須有一個大型項目經驗);

第二階段:spark運行的各種環境,各種故障的解決,性能優化(精通spark內核、運行原理);

第三階段:流處理、機器學習爲鰲頭,需要首先掌握前兩個階段的內容;

跟隨王家林老師的零基礎講解,注重動手實戰,成爲spark高數,笑傲大數據之林!

第一部分學習筆記

/**
 * Scala隱式轉換和併發編程
 * 1、Scala隱式徹底詳解  隱式參數 隱式類 隱式方法 隱式對象
 * 2、Scala併發編程詳解
 */
object Essay {
  def main(args: Array[String]): Unit = {
    //類擴展
    //implicit conversion function 隱式轉換函數  fileTorichFile

    implicit def rddToSequenceFileRDDFunctions[K <% Writable: ClassTag, V <% Writable: ClassTag](
      rdd: RDD[(K, V)]) = new SequenceFileRDDFunctions(rdd)
    implicit def rddToOrderedRDDFunctions[K : Ordering : ClassTag, V: ClassTag](
      rdd: RDD[(K, V)]) =
    new OrderedRDDFunctions[K, V, (K, V)](rdd)
    
    class Person(val name: String) //val 定義了的變量可以通過類的實例訪問
    //class Engineer(val name: String,val salary : Double)
    //new Person("Spark").code
    class Engineer(val name: String,val salary : Double){
      def code = println("Coding ....")
    }
    //def toCode(p:Person){
     // p.code
    //}
    //隱式轉化 當前上下文
    implicit def person2Enginner(p: Person):Engineer ={
      new Engineer(p.name,1000)
    }
    def toCode(p:Person){
      p.code
    }
    toCode(new Person("Scala"))
    //隱式參數
    //注入隱式值
    //implicit val
    //implicit val
    //隱式參數類型的伴生對象中去找隱式值
    class Level(val level : Int)
    def toWorker(name : String)(implicit l : Level)
    = println(name + " : " + l.level)
    
    implicit val level = new Level(8)
    toWorker("Spark")
    
  }
      implicit val default:String = "Flink"
//}
 
object Param{
   def print(content:String)(implicit language:String){
      println(language+":"+content)
   }
}
object Implicit_Parameters {

  def main(args: Array[String]) {
    Param.print("Spark")("Scala")
     
    import Context_Implicits._
    Param.print("Hadoop")
  }
}
class RicherFile(val file:File){
   def read = Source.fromFile(file.getPath()).mkString
}
 
class File_Implicits( path: String) extends File(path)
object File_Implicits{
    implicit def file2RicherFile(file:File)= new RicherFile(file) //File -> RicherFile
}

object Implicits_Internals {
	def main(args: Array[String]) {
	  val file = new File_Implicits("content.txt")
		println(file.read) 
		
	}
}
   ///Actor 類似Thread  Java 共享全局變量的加鎖機制
      //akka 核心是Actor
      //spark1.6.0自主內存管理
/*    class HiActor extends Actor{
      def act(){ //相當run
        while(true){
          while(true){
            case name:String => println(name)
          }
        }
      }
    }*/
    class HiActor extends Actor{
      def act(){
        while(true){
          receive {        //Actor收消息的方法
            case name: String => println(name)
      }
      }
      }
      }
    val actor = new HiActor
    actor.start()
    actor ! "Spark"
  }
  
  //Master  Worker 都是一個Actor
  
  case class Basic(name : String,age : Int)
  case class Worker(name: String ,age : Int)
  class basicActor extends Actor{
    def act(){
      while(true){
        receive{
          case Basic(name, age) => println("Basic information " +name + " "+age)
          case Worker(name,age) => println("Worker information " +name + " "+age)
        }
      }
    }
  }
  val b = new basicActor
  b.start()
  
  
  b ! Worker("Spark", 7)
  
  
//!?: 必須等到Actor消息處理完  同步
  
  //feture
  
  //DAGScheduler Master Worker


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章