连接大量数据帧

时间:2019-04-05 16:06:44

标签: scala apache-spark join out-of-memory

我有一个数据帧数组,我使用“ id”列将其加入以创建更大的数据帧

val dfArray = Array.fill[DataFrame](n)(spark.emptyDataFrame)
dfArray(0) = df_0
dfArray(1) = df_1
...
dfArray(n) = df_n

val output = dfArray.reduceLeft(_.join(_, Seq("id")))

如果我尝试对output.show执行任何操作(例如:output),则需要花费很长时间。有时会因OOM错误而崩溃。但是,如果我将output写入文件,然后将其读回另一个变量,则可以正常工作。

有人知道这是为什么以及如何解决它。

1 个答案:

答案 0 :(得分:1)

这是由于以下事实:show要求collect将所需的数据集中到应用程序驱动程序,而写入文件(即使未提供代码)也不需要。