【问题标题】:Combine all values of a map where each value is a dataframe组合地图的所有值,其中每个值都是一个数据框
【发布时间】:2019-10-11 13:36:32
【问题描述】:

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

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

【问题讨论】:

  • 您好,您实际上是要从地图中填充架构,否则它也会包含数据?
  • 每个键都是一个字符串。每个值都是一个数据框。数据框包含数据。例如:value_col1 value_col2 1 2 同样,对于键 2,数据框可能如下所示:value_col1 value_col2 1.1 2.2 我想合并这些数据。
  • 所有数据框的架构都相同?
  • 是的,所有数据帧都具有相同的架构。

标签: scala dataframe scala-collections


【解决方案1】:

您可以使用 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 字段。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-09
    • 2021-02-07
    相关资源
    最近更新 更多