当Spark遇到reduceByKey等操作时,会创建一个新的Stage。 Spark如何实现需要将哪个操作分成单独的阶段,如'reduceByKey'操作?当我添加新操作并希望它在另一个阶段运行时,我是如何实现它的?
答案 0 :(得分:3)
让我们以一个例子来做。它具有过去10年中每天的城市和温度数据集,例如:
纽约 - > [22.3,22.4,22.8,32.3,...........]
伦敦 - > [.................
多伦多 - > [.................
我的任务是将其转换为华氏温度,然后找到每个城市的平均值。这可以通过以下方式完成:
答案 1 :(得分:2)
有一种叫做流水线的东西。流水线操作是将多个RDD折叠为单个阶段的过程,当RDD可以从其父项计算而无需任何数据移动(Shuffling)。 For more
答案 2 :(得分:1)
导致数据重新分区的任何事情(在节点之间重新分配数据)将始终创建一个新阶段。重新分区主要是因为为您的RDD数据行选择了一个新密钥。由于课程的明确重新分配,也会发生重新分配。
如果不需要,你想避免重新引入新阶段,因为这隐含意味着也有重新洗牌。如果不需要,不要这样做,因为它很贵。
我们的想法是,您使用最大可用资源(节点及其CPU)来对数据进行分区 - 同时还要确保不引入偏差(一个节点或cpu有更多排队的位置)工作比另一个。)