Apache Spark:广播连接不适用于缓存的数据帧
Apache Spark: Broadcast join not workling for cached 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 正在为加入洗牌,因此似乎没有发生广播加入。
我的问题是:为什么会这样?当我缓存一个数据帧时,如何避免混洗?
非常感谢
尝试
firstDf.join(broadcast(secondDf), Seq....)
不确定为什么缓存会有所作为,Spark 有时有点不可预测。
您可以尝试将 secondDf
写入磁盘并读回而不是缓存,如果它很小,这样做的开销将是最小的。
当我加入两个数据帧时:
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 正在为加入洗牌,因此似乎没有发生广播加入。
我的问题是:为什么会这样?当我缓存一个数据帧时,如何避免混洗?
非常感谢
尝试
firstDf.join(broadcast(secondDf), Seq....)
不确定为什么缓存会有所作为,Spark 有时有点不可预测。
您可以尝试将 secondDf
写入磁盘并读回而不是缓存,如果它很小,这样做的开销将是最小的。