当联接跟随合并

时间:2017-11-30 14:38:48

标签: apache-spark spark-dataframe

鉴于我有2 DataFrame s df1df2

我执行join后跟coalesce

df1.join(df2, Seq("id")).coalesce(1)

似乎Spark创建了2个阶段,而第二阶段,SortMergeJoin发生的地方,只能由一个任务计算。

因此,这项独特的任务需要将整个数据帧都存储在内存中(参见:http://spark.apache.org/docs/latest/tuning.html#memory-usage-of-reduce-tasks)。

你能证实吗?

(我原本期望排序使用spark.sql.shuffle.partitions设置,第三个附加阶段执行合并。)

cf DAG

enter image description here

1 个答案:

答案 0 :(得分:2)

我在书中找到了确认High Performance Spark

  

由于任务是在子分区上执行的,因此任务数量   在包含coalesce操作的阶段执行是等效的   到coalesce的结果RDD中的分区数   转化