鉴于我有2 DataFrame
s df1
和df2
我执行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
答案 0 :(得分:2)
我在书中找到了确认High Performance Spark。
由于任务是在子分区上执行的,因此任务数量 在包含
coalesce
操作的阶段执行是等效的 到coalesce
的结果RDD中的分区数 转化