【发布时间】:2017-03-18 15:42:32
【问题描述】:
当 Spark 遇到 reduceByKey 等操作时,就会创建一个新的 Stage。 Spark如何实现需要将哪个操作拆分为单独的Stage,例如'reduceByKey'操作?当我添加新操作并希望它在另一个阶段运行时,我如何实现它?
【问题讨论】:
标签: apache-spark
当 Spark 遇到 reduceByKey 等操作时,就会创建一个新的 Stage。 Spark如何实现需要将哪个操作拆分为单独的Stage,例如'reduceByKey'操作?当我添加新操作并希望它在另一个阶段运行时,我如何实现它?
【问题讨论】:
标签: apache-spark
让我们用一个例子来做。这有过去 10 年中每天的城市和温度数据集,例如:
纽约 -> [22.3, 22.4, 22.8, 32.3, ......]
伦敦 -> [.................
多伦多 -> [..................
我的任务是将其转换为华氏温度,然后找到每个城市的平均值。这可以按如下方式完成:
【讨论】:
有一种叫做流水线的东西。流水线是将多个 RDD 折叠成单个阶段的过程,此时可以从其父级计算 RDD 而无需任何数据移动(Shuffling)。 For more
【讨论】:
导致数据重新分区(在节点之间重新分配数据)的任何事情都会创建一个新阶段。重新分区的发生主要是因为为您的 RDD 数据行选择了一个新的 Key。当然,由于明确的重新分区,也会发生重新分区。
如果不需要,您希望避免重新引入新阶段,因为这隐含地意味着也有重新洗牌。如果不需要,不要这样做,因为它很昂贵。
这个想法是您以这样一种方式对数据进行分区,即您可以使用最大的可用资源(节点及其 cpu) - 同时还要确保您不会引入倾斜(其中一个节点或 cpu 有更多的队列比另一个工作)。
【讨论】: