采用可能为空的数据帧列表的并集

时间:2018-05-03 15:38:11

标签: scala functional-programming apache-spark-sql

我有以下代码:

val dataFrames: List[DataFrame] = [...]
// TODO There has to be a better way to do lines below.
val salesOrderDF: Option[sql.DataFrame] =
  if (dataFrames.length > 1) {
    Some(dataFrames.reduceRight(_.union(_)))
  } else if (dataFrames.length == 1) {
    Some(dataFrames.head)
  } else {
    None
  }

有更好的方法吗?似乎可以以某种方式合并ifelse if个案。

1 个答案:

答案 0 :(得分:2)

您不需要else if,只有一个元素的reduce将返回该元素。如果您不想使用if-else,则可以检查列表是否为空并且模式匹配。

val salesOrderDF: Option[sql.DataFrame] = dataFrames match {
    case Nil => None
    case nonEmptyDfs => Some(nonEmptyDfs.reduce(_ union _))
}