Spark 基础 —— 类与伴生对象(companion object)

只要分析过的任务可能会重复出现,就值得花时间改善代码。

对缺失值分析而言,我们的第一个任务就是写一个类似于 Spark StatCounter 类的东西,以正常处理缺失值。

import org.apache.spark.util.StatCounter
class NAStatCounter extends Serializable {
    val stats: StatCounter = new StatCounter()
    var missing: Long = 0
    def add(x: Double): NAStatCounter = {
        if (java.long.Double.isNaN(x)){
            missing += 1
        }
        else{
            stats.merge(x)
        }
        this
    }
    def merge(other: NAStatCounter): NAStatCounter {
        stats.merge(other.stats)
        missing += other.missing
        this
    }
    override def toString = {
        "stats: " + stats.toString + "NaN: " + missing
    }
}

和类定义一起,我们为 NAStatCounter 定义一个半生对象(companion object):

object NAStatCounter extends Serializable {
    def apply(x: Double) = new NAStatCounter().add(x)
}

Scala 的 object 关键字用于声明一个单例对象,该对象为类提供助手方法,类似于 Java 类的 static 方法定义。

val nastats = NAStatCounter(17.29)
val nastats = NAStatCounter.apply(17.29)

你可能感兴趣的:(Spark 基础 —— 类与伴生对象(companion object))