我正试图将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)
来减少分区的数量(这是数据帧的所有分区的总和(