文档章节

spark中reduce和reduceByKey的区别

牧师-Panda
 牧师-Panda
发布于 2017/08/19 16:20
字数 360
阅读 166
收藏 0

首先我们先讲讲两个函数在功能上的作用与区别是什么,然后我们再深入讨论两个函数在内部机理有什么不同。

reduce(binary_function) 

reduce将RDD中元素前两个传给输入函数,产生一个新的return值,新产生的return值与RDD中下一个元素(第三个元素)组成两个元素,再被传给输入函数,直到最后只有一个值为止。

具体过程,RDD有1 2 3 4 5 6 7 8 9 10个元素, 
1+2=3 
3+3=6 
6+4=10 
10+5=15 
15+6=21 
21+7=28 
28+8=36 
36+9=45 
45+10=55

reduceByKey(binary_function)

reduceByKey就是对元素为KV对的RDD中Key相同的元素的Value进行binary_function的reduce操作,因此,Key相同的多个元素的值被reduce为一个值,然后与原RDD中的Key组成一个新的KV对。

那么讲到这里,差不多函数功能已经明了了,而reduceByKey的是如何运行的呢?下面这张图就清楚了揭示了其原理:

亦即,它会在数据搬移以前,提前进行一步reduce操作。

可以实现同样功能的还有GroupByKey函数,但是,groupbykey函数并不能提前进行reduce,也就是说,上面的处理过程会翻译成这样:

所以在处理大规模应用的时候,应该使用reduceByKey函数。

 

 

© 著作权归作者所有

共有 人打赏支持
牧师-Panda
粉丝 30
博文 146
码字总数 180044
作品 0
浦东
打造基于hadoop的网站日志分析系统(5)之spark在日志分析系统里的简单应用

1.下载spark和运行 wget http://apache.fayea.com/apache-mirror/spark/spark-1.0.0/spark-1.0.0-bin-hadoop2.tgz 我这里下载的是1.0.0版,由于我们只是测试spark的用法所以不需要配置spark集...

豚鼠窝窝
2014/07/10
0
0
最最简单的~WordCount¬

sc.textFile("hdfs://....").flatMap(line =>line.split(" ")).map(w =>(w,1)).reduceByKey(+).foreach(println) 不使用reduceByKey sc.textFile("hdfs://....").flatMap(l=>l.split(" ")).m......

雪童子
2015/10/21
0
0
Spark与Hadoop计算模型的比较分析

Spark与Hadoop计算模型的比较分析 最近很多人都在讨论Spark这个貌似通用的分布式计算模型,国内很多机器学习相关工作者都在研究和使用它。   Spark是一个通用的并行计算框架,由UCBerkele...

jmppok
2015/03/25
0
0
[Kafka与Spark集成系列三] Spark编程模型

版权声明:本文为博主原创文章,未经博主朱小厮允许不得转载。 https://blog.csdn.net/u013256816/article/details/82082109 在Spark中,我们通过对分布式数据集的操作来表达我们的计算意图,...

朱小厮
08/26
0
0
Spark初识入门core (一)

Spark初识入门core (一) 标签(空格分隔): Spark的部分 一:spark 简介 1.1 spark 的来源 Hive Storm Mahout Griph Spark Core Spark SQL Spark Streaming Spark ML Spark GraphX Spark......

flyfish225
05/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

[Hive]JsonSerde使用指南

注意: 重要的是每行必须是一个完整的JSON,一个JSON不能跨越多行,也就是说,serde不会对多行的Json有效。 因为这是由Hadoop处理文件的工作方式决定,文件必须是可拆分的,例如,Hadoop将在...

Mr_yul
34分钟前
1
0
54:mysql修改密码|连接mysql|mysql常用命令

1、mysql修改密码: root用户时mysql的超级管理员,默认mysql的密码是空的,直接可以连接上去的,不过这样不安全; 注释:为了方便的使用mysql,需要把mysql加入到环境变量里; #后续自己输入mys...

芬野de博客
41分钟前
1
0
鼠标单击复制粘贴标签中的内容

<span ref="spanContentOne" id="spanContentOne" style="font-size: 14px;">或许不是最亮眼,总比瞎买强一点</span><!--<input type="button" @click="copyClick('1')" value="复制" />-......

帝子兮
46分钟前
1
0
使用axel多线程疯狂下载

在Linux中比较常见见的下载工具是curl和wget,但是下载比较大的文件两者都不支持多线程, 断点续传的作用不见得能发挥到最大。今天介绍一个axel工具,开启多线程疯狂下载。 安装 Fedora/Cen...

linuxprobe16
48分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部