Apache Spark:广播连接不适用于缓存的数据帧

时间:2018-05-09 18:51:03

标签: apache-spark spark-dataframe

当我将两个数据帧连接为:

 val secondDf= sparkSession.read.parquet(inputPath)
 joinedDf = firstDf.join(secondDf, Seq("ID"), "left_outer")

Spark似乎正在进行广播加入,并且没有发生任何混乱。

但是一旦我缓存了较小的Df:

 val secondDf= sparkSession.read.parquet(inputPath).cache()
 joinedDf = firstDf.join(secondDf, Seq("ID"), "left_outer")

Spark加入了连接,因此似乎没有广播加入。

我的问题是:为什么会这样?当我缓存一个数据帧时,如何避免混乱?

非常感谢

1 个答案:

答案 0 :(得分:0)

尝试

firstDf.join(broadcast(secondDf), Seq....)

不确定为什么缓存应该有所作为,有时候Spark有点不可预测。

您可以尝试将secondDf写入磁盘并将其读回而不是缓存,如果它很小,那么这样做的开销很小。