合并地图的所有值,其中每个值都是一个数据框

Combine all values of a map where each value is a dataframe

在使用 Spark 的 Scala 中,我有一个 Map,其中键是一个字符串,值是一个 DataFrame。

架构如下所示:

scala.collection.immutable.Map[String,org.apache.spark.sql.DataFrame] = Map(Key_A -> [value_col1: string, value_col2: string ... 1 more field], Key_B -> [value_col1: string, value_col2: string ... 1 more field])

我不关心这里的密钥。我想要一个结合了所有值的数据框,看起来像这样。

value_col1     value_col2
    1               2
    1.1             2.2

我正在寻找如何使用简单和 recommended/efficient 方法来做到这一点。

您可以使用地图在地图值之间迭代并合并数据帧。如果您的架构对于所有数据帧都保持相同,您可以使用 union 合并数据:

val mapping = Map("df1" -> df1, "df2" -> df)

val finalDF = mapping.values.map{df =>
  df.select("*")
}.reduce((d0, d1) => d0.union(d1))

否则,如果数据帧有不同的模式,则将 union 替换为 inner join:

val finalDF = mapping.values.map{df =>
  df.select("*")
}.reduce((d0, d1) => d0.join(d1, "id"))

这里我们假设数据帧共享相同的 id 字段。