如何在Scala中处理函数的无输出?

Sca*_*Boy 0 scala

我有以下功能:

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

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

  }
Run Code Online (Sandbox Code Playgroud)

此函数返回Option[DataFrame].

然后我想使用这个函数如下:

val df = getData(spark, indices)
df.persist(StorageLevel.MEMORY_AND_DISK)
Run Code Online (Sandbox Code Playgroud)

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

cod*_*tsu 5

如果你关心None我在这里使用简单的模式匹配:

df match {
  case None => throw new RuntimeException()
  case Some(dataFrame) => dataFrame.persist(StorageLevel.MEMORY_AND_DISK)
}
Run Code Online (Sandbox Code Playgroud)

但如果你不在乎,只需使用foreach:

df.foreach { dataFrame =>
  dataFrame.persist(StorageLevel.MEMORY_AND_DISK)
}
Run Code Online (Sandbox Code Playgroud)