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

来源:互联网 发布:李刚java疯狂讲义 pdf 编辑:程序博客网 时间:2024/05/29 19:15

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

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

import org.apache.spark.util.StatCounterclass 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)
0 0
原创粉丝点击