zoukankan      html  css  js  c++  java
  • Spark小课堂Week5 Scala初探

    Spark小课堂Week5 Scala初探

    Scala是java威力加强版。

    对Java的改进

    这里会结合StreamingContext.scala这个代码说明下对Java的改进方面。

    • 方便测试方式,增加了可以指定位置的作用域。
    • 成员变量声明,构造方法,get、set方法一体化。
    • []表示泛型,不是<>
    class StreamingContext private[streaming] (
    
    sc_ : SparkContext,
        
    cp_ : Checkpoint,
    
        batchDur_ : Duration
  
      ) extends Logging 
    
    • case声明Java Bean,省掉new的操作
    private[scheduler] sealed trait JobSchedulerEvent
    
private[scheduler] case class JobStarted(job: Job, startTime: Long) extends JobSchedulerEvent
    
    • 用val控制声明周期,防止他人重新构造,已将所有基本类型对象化,所以val内容是可变的
    • 提供类型推断,对于编译器可推断类型无需定义
    private[streaming] val isCheckpointPresent = (cp_ != null)
    
    • 会自动根据分支的最后一个逻辑返回,不需要return,可以表达式来定义逻辑
    private[streaming] var checkpointDir: String = {
    
  if (isCheckpointPresent) {
      
    sc.setCheckpointDir(cp_.checkpointDir)
 
        cp_.checkpointDir
 
      } else {
 
        null
 
      }
      
}
    
    • 用None替代null,由定义方来定义是否可能空指针情况,降低调用方的开发难度
    private[streaming] val uiTab: Option[StreamingTab] =

      if (conf.getBoolean("spark.ui.enabled", true)) {

        Some(new StreamingTab(this))

      } else {

        None

      }
    

    作业

    题目

    在RDD.scala中没有sortByKey方法,为什么可以调用。

    解析

    Scala中有一个非常强大的隐式转换功能,可以实现方法的动态注入。

    以下是范例代码。可以看到通过隐式转换方法,可以动态给Person类添加toCode这个方法。
    在Spark源码中到处使用。

    class Person(val name:String)
    class Engineer(val name:String,val salary:Double){
        def code = println("coding:" + name)
    }
    def toCode(p:Person){
        p.code
    }
    
    implicit def personToEngineer(p:Person) : Engineer= {
        new Engineer(p.name,0);
    }
    new Person("aa").code
    

    关于

    小课堂是在公司进行内部交流的一系列主题,偏基础,但是比较零散,持续更新中。

  • 相关阅读:
    建筑经济与企业管理 【1090】
    31 任意进制计数器的构成方法1
    30 同步计数器
    29 典型的时序电路模块2
    STM32的FSMC详解
    28 典型的时序电路模块1
    27 FSM,时序电路的分析方法
    26 电路结构和逻辑功能的关系
    25 触发器逻辑功能的分类
    24 触发器的电路结构和动作特点
  • 原文地址:https://www.cnblogs.com/dt-zhw/p/5700788.html
Copyright © 2011-2022 走看看