将列表中的 n 个 DF 合并到单个 DataFrame - Scala
Posted
技术标签:
【中文标题】将列表中的 n 个 DF 合并到单个 DataFrame - Scala【英文标题】:Merge n DF's in a list to a single 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 个数据帧做一些检查点。再次阅读它们并尝试再次联合它们。关键是检查血统图,如果它很大,试着打破它 ***.com/questions/37612622/… 最后转换为RDD并返回DF? 【参考方案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)
来减少分区数(这是数据帧所有分区的总和)
【讨论】:
以上是关于将列表中的 n 个 DF 合并到单个 DataFrame - Scala的主要内容,如果未能解决你的问题,请参考以下文章