我正在查看我的Spark任务的一些输入和输出指标。基本上,这是按键进行计数的,最后是一个saveAsHadoop,用于将数据存储到DynamoDB中。经典- map 缩减。
看一些指标,
似乎在映射之后,spark会盲目地对数据进行混洗,然后将reduce函数应用于每个混洗的分区。如果reduce函数主要是减少输出,则最好是先进行排序,然后在shuffle之前然后在每个分区上再对每个分区应用reduce,这是很容易的,因为reduce函数可以进行关联和通勤。这是经典的Hadoop映射->合并->随机播放->减少模式。 Spark可以利用此优化吗?
最佳答案
ReduceByKey:
在上图中,您可以看到RDD X具有多个成对的元素集,例如(a,1)和(b,1),具有3个分区。
它接受一个函数(accum, n) => (accum + n)
,该函数用默认的整数值0初始化accum变量,为每个键添加一个元素,然后返回最终RDD Y
,其总计数与键配对。并在将跨分区重新分配数据之前,对每个分区在本地执行相同的aggregation
。
这是一项广泛的操作,因为将多个分区中的数据改组并创建另一个RDD
。
在跨分区发送数据之前,还要使用相同的关联函数merges the data locally
进行优化数据改组
Source
关于hadoop - 通过在随机播放之前在每个分区上运行reduce函数,可以优化Spark ReduceByKey函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41175134/