Spark在两个分区数据帧之间进行了colocated连接

时间:2017-03-23 19:21:47

标签: scala join apache-spark apache-spark-sql spark-dataframe

对于Spark 1.6.0中两个DataFrames之间的以下连接

val df0Rep = df0.repartition(32, col("a")).cache
val df1Rep = df1.repartition(32, col("a")).cache
val dfJoin = df0Rep.join(df1Rep, "a")
println(dfJoin.count)

这种加入不仅是共同分区而且是共存的吗?我知道对于RDD,如果使用相同的分区并在同一操作中进行混洗,则连接将位于同一位置。但是数据帧怎么样?谢谢。

1 个答案:

答案 0 :(得分:1)

[https://medium.com/@achilleus/https-medium-com-joins-in-apache-spark-part-3-1d40c1e51e1c]

根据上面提供的文章链接,“排序-合并”联接是默认联接,想添加要点

为使Sort-Merge联接具有理想的性能,重要的是所有 具有相同连接键值的行可在同一行中使用 划分。这保证了臭名昭著的分区交换(随机播放) 执行者之间。并置的分区可以避免不必要的数据 洗牌。数据需要在连接键中均匀分布。的 连接键的数量足够独特,因此它们可以相等 分布在整个集群中,以实现最大并行度 可用分区