spark reducebykey函数是否在洗牌之前在每个分区上运行reduce函数来优化?

b1zrtrql  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(397)

我正在研究spark任务的一些输入和输出指标。这基本上是一个count by key,最后有一个saveashadoop将数据存储到dynamodb中。经典的MapReduce。

看看一些指标,

似乎在Map之后,spark会盲目地对数据进行洗牌,然后对每个洗牌的分区应用reduce函数。如果reduce函数主要减少了输出,那么在洗牌之前和洗牌之后,首先对每个分区进行排序并应用reduce是最佳的,这很容易,因为reduce函数会进行关联和交换。这是一个经典的hadoopMap->组合->洗牌->减少模式。spark能利用这个优化吗?

ars1skjm

ars1skjm1#

还原键:

在上图中,您可以看到rddx有一组多个成对的元素,如(a,1)和(b,1)以及3个分区。
它接受一个函数 (accum, n) => (accum + n) 它用默认整数值0初始化accum变量,为每个键加上一个元素并返回final RDD Y 总计数与键配对。在跨分区洗牌数据之前,它也会这样做 aggregation 本地为每个分区。
这是一个广泛的操作,因为它从多个分区洗牌数据,并创建另一个分区 RDD .
在跨分区发送数据之前,它还 merges the data locally 使用相同的关联函数优化数据洗牌
来源

相关问题