通过在shuffle之前在每个分区上运行reduce函数来优化Spark ReduceByKey函数吗?

时间:2016-12-15 23:42:34

标签: hadoop apache-spark

我正在查看我的spark任务的一些输入和输出指标。这基本上是一个按键计数,最后是saveAsHadoop将数据存储到DynamoDB中。经典 - map-reduce。

enter image description here

查看一些指标,

enter image description here  看来,在地图之后,spark会盲目地将数据混洗,然后将reduce函数应用于每个混洗的parition。如果reduce函数主要减少输出,那么首先进行排序是最优的,并且在shuffle之前和之后再次将reduce应用于每个分区,并且很容易因为reduce函数关联和通勤。这是一张经典的Hadoop地图 - >结合 - > shuffle - >减少模式。 Spark可以利用这种优化吗?

1 个答案:

答案 0 :(得分:0)

ReduceByKey:

enter image description here

在上图中,您可以看到RDD X具有多个配对元素集,如(a,1)和(b,1),包含3个分区。

它接受一个函数(accum, n) => (accum + n),它使用默认的整数值0初始化accum变量,为每个键添加一个元素,并返回最终RDD Y,其总计数与密钥配对。并且在对分区中的数据进行混洗之前,它会为每个分区在本地执行相同的aggregation

这是一项广泛的操作,因为从多个分区中移植数据并创建另一个RDD

在跨分区发送数据之前,它还merges the data locally使用相同的关联函数进行优化数据混洗

Source