如何处理Scala中的None输出?

时间:2018-10-15 09:44:57

标签: scala

我具有以下功能:

 def getData(spark: SparkSession,
             indices: Option[String]): Option[DataFrame] = {

    indices.map{
      ind =>
        spark
          .read
          .format("org.elasticsearch.spark.sql")
          .load(ind)
    }

  }

此函数返回Option[DataFrame]

然后我要按以下方式使用此功能:

val df = getData(spark, indices)
df.persist(StorageLevel.MEMORY_AND_DISK)

当然,最后两行代码不会编译,因为df可能是None。 Scala中处理None输出的惯用方式是什么? 如果df为None,我想抛出一个异常并停止程序。否则,我想persist

2 个答案:

答案 0 :(得分:5)

如果您确实关心None,则可以在此处使用简单的模式匹配:

df match {
  case None => throw new RuntimeException()
  case Some(dataFrame) => dataFrame.persist(StorageLevel.MEMORY_AND_DISK)
}

但是,如果您不在乎,只需使用foreach即可:

df.foreach { dataFrame =>
  dataFrame.persist(StorageLevel.MEMORY_AND_DISK)
}

答案 1 :(得分:1)

val df = dfOption.getOrElse(throw new Exception("Disaster Strikes"))
df.persist(...)