【问题标题】:Merge n DF's in a list to a single DataFrame - Scala将列表中的 n 个 DF 合并到单个 DataFrame - Scala
【发布时间】:2020-10-29 08:29:58
【问题描述】:

我正在尝试将 1000 个 DataFrame 合并到单个 DF 中,该 DF 以 Seq[org.apache.spark.sql.DataFrame] 作为列表存在。所以我使用了类似下面的东西,x 是 Dataframes 的列表:

val y = x.reduce(_ union _)

但它需要永恒的时间才能完成。

还有其他有效的方法来完成上述任务吗?也许通过编码甚至通过 Spark 配置设置对其进行优化?

非常感谢任何帮助。

【问题讨论】:

  • 尝试分阶段进行(所以说 sqrt(1000) 数据帧并将它们写出来,然后读入)。
  • 尝试为每 40 到 50 个数据帧做一些检查点。再次阅读它们并尝试再次联合它们。关键是检查血统图,如果它很大,试着打破它
  • 最后转换为RDD并返回DF?

标签: scala dataframe apache-spark


【解决方案1】:

首先我会尝试“批量”联合,有时这会有所帮助:

dfs.grouped(50)
.map(dfss => dfss.reduce(_ union _))
.reduce(_ union _)

如果这还不够,您可以尝试使用检查点:

dfs.grouped(50)
.map(dfss => dfss.reduce(_ union _).checkpoint(true))
.reduce(_ union _)

如果数据帧相当小,您还可以通过在内部map 中使用dfss.reduce(_ union _).coalesce(1) 来减少分区数(这是数据帧所有分区的总和)

【讨论】:

    猜你喜欢
    • 2021-10-06
    • 2020-09-22
    • 2021-03-25
    • 2016-05-07
    • 2020-06-13
    • 2018-08-24
    • 2017-03-10
    • 2019-04-06
    • 2011-08-14
    相关资源
    最近更新 更多