合并地图的所有值,其中每个值都是一个数据框
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
字段。
在使用 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
字段。