首页 > 解决方案 > 合并可能为空的数据框列表

问题描述

我有以下代码:

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案例可以以某种方式结合起来。

标签: scalafunctional-programmingapache-spark-sql

解决方案


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

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

推荐阅读