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

时间:2019-05-25 02:42:00

标签: scala dataframe scala-collections

在使用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

我希望了解如何使用简单以及推荐/有效的方法来做到这一点。

1 个答案:

答案 0 :(得分:0)

您可以使用map在地图值之间进行迭代并合并数据框。如果所有数据框的架构都相同,则可以使用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字段。