scala

m4pnthwp  于 2021-05-18  发布在  Spark
关注(0)|答案(1)|浏览(372)

我正在尝试将1000个dataframe合并到一个df中,这个df以seq[org.apache.spark.sql.dataframe]的形式作为一个列表出现。所以我用了如下的方法,x是Dataframe的列表:

val y = x.reduce(_ union _)

但它需要永恒才能完成。
有没有其他有效的方法来完成上述任务?可能是通过编码,甚至通过spark配置设置进行优化?
非常感谢您的帮助。

slhcrj9b

slhcrj9b1#

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

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

如果这还不够,您可以尝试使用checkpooints:

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

如果Dataframe相当小,还可以使用 dfss.reduce(_ union _).coalesce(1) 在内部 map

相关问题