当我们在spark中进行检查点时,我们会通过以下声明:
checkpointData.get.doCheckPoint()
为什么不使用checkpointData.doCheckPoint()
?
声明中的get
是否类似于吸气剂?我知道scala类会自动生成getter和setter。
或者是其他一些我不知道的语法?
答案 0 :(得分:2)
如果您正在讨论RDD类(https://github.com/apache/spark/blob/master/core/src/main/scala/org/apache/spark/rdd/RDD.scala)的源代码,那么因为checkpointData
的类型为Option[RDDCheckpointData[T]]
请参阅源代码中的声明:
private[spark] var checkpointData: Option[RDDCheckpointData[T]] = ...
所以要调用RDDCheckpointData的方法,我们需要从Option中获取它(在确定它isDefined
之后,正如你在代码中看到的那样)
阅读有关scala选项类的更多信息: http://www.scala-lang.org/api/current/index.html#scala.Option http://danielwestheide.com/blog/2012/12/19/the-neophytes-guide-to-scala-part-5-the-option-type.html