在使用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
我希望了解如何使用简单以及推荐/有效的方法来做到这一点。
答案 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
字段。