我正在查看我的spark任务的一些输入和输出指标。这基本上是一个按键计数,最后是saveAsHadoop将数据存储到DynamoDB中。经典 - map-reduce。
查看一些指标,
看来,在地图之后,spark会盲目地将数据混洗,然后将reduce函数应用于每个混洗的parition。如果reduce函数主要减少输出,那么首先进行排序是最优的,并且在shuffle之前和之后再次将reduce应用于每个分区,并且很容易因为reduce函数关联和通勤。这是一张经典的Hadoop地图 - >结合 - > shuffle - >减少模式。 Spark可以利用这种优化吗?
答案 0 :(得分:0)
ReduceByKey:
在上图中,您可以看到RDD X具有多个配对元素集,如(a,1)和(b,1),包含3个分区。
它接受一个函数(accum, n) => (accum + n)
,它使用默认的整数值0初始化accum变量,为每个键添加一个元素,并返回最终RDD Y
,其总计数与密钥配对。并且在对分区中的数据进行混洗之前,它会为每个分区在本地执行相同的aggregation
。
这是一项广泛的操作,因为从多个分区中移植数据并创建另一个RDD
。
在跨分区发送数据之前,它还merges the data locally
使用相同的关联函数进行优化数据混洗