AggregateByKey分区?

时间:2016-12-10 10:01:52

标签: scala apache-spark hadoop-partitioning

我有:

A_RDD = anRDD.map()

B_RDD = A_RDD.aggregateByKey()

好的,我的问题是:

如果我在A_RDD之后放置partitionBy(new HashPartitioner),如:

A_RDD = anRDD.map().partitionBy(new HashPartitioner(2))

B_RDD = A_RDD.aggregateByKey()

1)这是否与我保持原样一样有效,首先呢? aggregateByKey()将使用A_RDD中的hashPartitioner,对吧?

2)或者如果我在第一个示例中保留它,则aggregateByKey()将首先按键聚合每个分区,然后发送每个“聚合”(键,值)对更多有效的分区方式?

3)为什么不在RDD上进行map,flatMap和其他转换不能就如何动态分区(键,值)对进行论证? 我的意思是例如在每个元组的map()操作期间让我们说,=>将此元组也发送到特定分区 已由map e.x上的partitioner参数指定:map(,Partitioner)。

我试图抓住aggregateByKey()的概念它是如何工作的,但每当我想到这个时,就会出现一个新问题...... 提前谢谢。

1 个答案:

答案 0 :(得分:1)

  • 如果您将partitionBy放在aggregateByKey之前,它通常效率会低于aggregateByKey。您可以有效地禁用地图侧合并。
  • 如果你离开,将会有地图侧组合,通常效率更高。
  • 非洗牌操作不需要分区,因为没有数据移动。操作在每台机器上本地执行。