hadoop - 通过在随机播放之前在每个分区上运行reduce函数,可以优化Spark ReduceByKey函数吗?

标签 hadoop apache-spark

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

enter image description here

看一些指标,

enter image description here
似乎在映射之后,spark会盲目地对数据进行混洗,然后将reduce函数应用于每个混洗的分区。如果reduce函数主要是减少输出,则最好是先进行排序,然后在shuffle之前然后在每个分区上再对每个分区应用reduce,这是很容易的,因为reduce函数可以进行关联和通勤。这是经典的Hadoop映射->合并->随机播放->减少模式。 Spark可以利用此优化吗?

最佳答案

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

关于hadoop - 通过在随机播放之前在每个分区上运行reduce函数,可以优化Spark ReduceByKey函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41175134/

相关文章:

java - 缩放基于 Java 的树

scala - 使用 Spark sc.textFile 读取文件时如何捕获 BlockMissingException?

java - HBase:如何在单个扫描操作中指定多个前缀过滤器

java - 如何在java中展平spark数据集中的包装数组

hadoop - SparkContext.textFile 的幕后工作原理是什么?

hadoop - 将空字符串选择/视为 NULL 的 Hive 解决方案

python - pickle .PicklingError : args[0] from __newobj__ args has the wrong class with hadoop python

scala - 结构化的 Spark 流 leftOuter join 的行为类似于 inner join

apache-spark - Kotlin 从 cli 编译 - Unresolved reference

scala - 使用 elasticsearch-spark 连接器从 spark 读取 ES : all the fields are returned