博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Apache Spark API][GroupByKey Vs ReduceByKey]
阅读量:6408 次
发布时间:2019-06-23

本文共 1069 字,大约阅读时间需要 3 分钟。

hot3.png

http://spark.apache.org/docs/1.6.0/api/scala/index.html#org.apache.spark.rdd.PairRDDFunctions 

val words = Array("one", "two", "two", "three", "three", "three")    val wordPairsRDD = sc.parallelize(words).map(word => (word, 1))    val wordCountsWithReduce = wordPairsRDD.reduceByKey(_ + _)    val wordCountsWithGroup = wordPairsRDD.groupByKey().map(t => (t._1, t._2.sum))

reduceByKey(func: (V,V) => V, numPartitions: Int): RDD[(K,V)]

reduceByKey用于对每个key对应的多个value进行本地先merge操作,并且merge操作可以通过函数自定义

groupByKey(numPartitions: Int): RDD[(K,Iterable[V])]

groupByKey也是对每个key进行操作,但是只生成一个sequence。如果需要对sequence进行aggregation操作时,groupByKey本身是不能自定义操作函数的。

 

(1) 采用reduceByKey时,spark可以在每个分区shuffle之前,将待输出的数据与一个共用的key结合。即在shuffle之前调用lamdba函数,先计算一遍。等shuffle候,再执行lamdba函数。减少了shuffle过程的数据量。

(2)groupByKey 不接受lamdba函数,spark只能shuffle所有的k-v pair.之后再调用lamdba函数计算。造成了集群节点之间的开销很大。

 

注意:

(1)在对进行复杂计算时,reduceByKey优于groupByKey

(2)如果仅仅是group处理,那么以下函数应该优先于 groupByKey

        (1)、combineByKey 组合数据,但是组合之后的数据类型与输入时值的类型不一样。

        (2)、foldByKey合并每一个 key 的所有值,在级联函数和“零值”中使用。

转载于:https://my.oschina.net/u/204498/blog/838474

你可能感兴趣的文章
java 正则表达式 img_Java正则表达式获得html字符串里的<img src=""/> 中的url列表
查看>>
dbutils java_Java篇-DBUtils与连接池
查看>>
java 文件crc校验_一个获取文件crc32校验码的简洁的java类 | 学步园
查看>>
java flatmapfunction_Java8 Stream flatmap中间操作用法解析
查看>>
java rmi spring 4.0_Java Spring RMI一些尝试
查看>>
JAVA怎么连接华为的HDFS系统_JAVA-API操作HDFS文件系统(HDFS核心类FileSystem的使用)...
查看>>
java牛客网四则运算_数据库刷题—牛客网(51-61)
查看>>
Java get set6_JDK6的新特性(转)
查看>>
java发送邮件 不登陆_Java邮件到Exchange Server“不支持登录方法”
查看>>
编程学习初体验(5. 如何自学编程)(2)
查看>>
思科ISR G1与ISR G1C的区别
查看>>
利用perl提取web配置文件中的域名对应的路径
查看>>
Centos5上安装JRE和LUMAQQ
查看>>
关于监控工具的主动发起性能测试
查看>>
我的友情链接
查看>>
OpenSSL学习(十六):基础-指令rand
查看>>
Apache+tomcat实现高可用WEB集群
查看>>
KeyMob致力于打造国内领先的移动广告平台
查看>>
oracle的基本语法
查看>>
路由选路原则
查看>>