将列表中的 n 个 DF 合并到单个数据帧 - Scala



我正试图将1000个DataFrame合并到一个单独的DF中,这些DF以Seq[org.apache.spark.sql.DataFrame]的形式显示为列表。所以我用了下面这样的东西,x是数据帧的列表:

val y = x.reduce(_ union _)

但它需要永恒才能完成。

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

非常感谢您的帮助。

首先我会尝试一个"分批";工会,有时这会有所帮助:

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

如果这还不够,你可以尝试使用checkpooint:

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

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

最新更新