Apache spark 火花中的还原基和摩擦比

Apache spark 火花中的还原基和摩擦比,apache-spark,Apache Spark,在《学习火花》一书中,他们写道: 对于作用于单个RDD的操作,如reduceByKey(), 在预先分区的RDD上运行将导致每个 在一台机器上本地计算的键,只需要 最终,本地减少的值将从每个工作节点发送回 大师 但是,在本文中,作者说不需要预分区,因为: 对于reduceByKey(),第一个质量聚合相同的元素 具有提供的关联减少功能的键本地首先打开 每个执行者,然后最终在执行者之间聚合 那么,如果reduceByKey()无论如何都会首先聚集每个执行器上的元素,而不清除数据,那么为什么一本书会

在《学习火花》一书中,他们写道:

对于作用于单个RDD的操作,如reduceByKey(), 在预先分区的RDD上运行将导致每个 在一台机器上本地计算的键,只需要 最终,本地减少的值将从每个工作节点发送回 大师

但是,在本文中,作者说不需要预分区,因为:

对于reduceByKey(),第一个质量聚合相同的元素 具有提供的关联减少功能的键本地首先打开 每个执行者,然后最终在执行者之间聚合


那么,如果reduceByKey()无论如何都会首先聚集每个执行器上的元素,而不清除数据,那么为什么一本书会建议进行预分区呢?

这本书实际上并不建议进行预分区。它仅描述应用于分区的
RDD
*ByKey
方法的行为。考虑到分区本身就是一个洗牌,因此得出结论,您应该为单个
reduceByKey
预先分区数据是不合理的

事实上,如果数据包含具有K个唯一键和
p
分区的N个值,则场景
reduceByKey
∘ 
partitionBy
始终大于等于单独使用
reduceByKey
时的随机播放大小


如果要应用多个摊销成本的
partitionBy
,然后是一组
*byKey
*Join
应用程序可能低于应用
*byKey
方法的成本。类似地,如果您已经将数据作为不同操作的一部分进行了洗牌,并且稍后将应用洗牌操作,那么您应该尝试保留现有分区。然而,这并不意味着你应该总是先选择分区方法。

上面的答案大致概括了ReduceBy和partitionBy方法


要回答您的问题,您不需要在调用reduceByKey之前应用partitionBy。

如果我理解正确,如果我只想应用reduceByKey一次,就不需要使用partitionBy,对吗?