我具有以下功能:
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
。
答案 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(...)