Spark编程指南入门之Java篇五-数据重组Shuffle介绍

9. 数据重组Shuffle介绍

Spark的某些操作会触发数据重组Shuffle事件。Shuffle是Spark对各分区的数据进行重新分布的机制,是一个复杂而且代价较高的操作,因为一般需要在执行器和数据节点之间进行数据复制。

9.1 背景

我们可以通过reduceByKey操作的例子来理解shuffle过程。reduceByKey操作将原PairRDD中具有相同key的元素聚合为一个元组tuple,该tuple中的key对应的值为执行指定函数之后的结果,最后生成了一个新的PairRDD。这个操作的挑战是:具有相同key的元素不一定都分布在同一个分区,甚至不在同一个数据节点,但是它们必须协同定位计算结果。在计算过程中,一个任务task处理一个分区。因此,为了执行reduceByKey操作,Spark需要进行一个“全交互”操作:必须先从所有分区读取全部的keys和对应的values,然后把各个分区具有相同key的合并结果汇总在一起计算出最终结果,这个过程称为数据重组Shuffle。

虽然每个分区中经过shuffle后的数据元素是确定的,分区间的顺序也是确定的,但是这些元素是无序的。如果想在shuffle操作后得到排序的数据,可以考虑使用以下方法:
  • mapPartitions 结合sort方法对每一个分区内的数据进行排序
  • repartitionAndSortWithinPartitions 在重新分区的同时对分区内的数据进行排序
  • sortBy 对整个RDD排序
会引起shuffle的操作有:
  • 重新分区操作,例如repartition、coalesce
  • *ByKey操作,
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值