Spark基本的RDD算子之groupBy,groupByKey,mapValues
1. groupby
def groupBy[K: ClassTag](f: T => K): RDD[(K, Iterable[T])]
def groupBy[K: ClassTag](f: T => K, numPartitions: Int): RDD[(K, Iterable[T])]
def groupBy[K: ClassTag](f: T => K, p: Partitioner): RDD[(K, Iterable[T])]
groupBy算子接收一个函数,这个函数返回的值作为key,然后通过这个key来对里面的元素进行分组。
val a = sc.parallelize(1 to 9, 3)
a.groupBy(x => { if (x % 2 == 0) "even" else "odd" }).collect
//返回的even或者odd字符串作为key来group RDD里面的值,
res42: Array[(String, Seq[Int])] = Array((even,ArrayBuffer(2, 4, 6, 8)), (odd,ArrayBuffer(1, 3, 5, 7, 9)))
2. groupbykey
def groupByKey(): RDD[(K, Iterable[V])]
def groupByKey(numPartitions: Int): RDD[(K, Iterable[V])]
def groupByKey(partitioner: Partitioner): RDD[(K, Iterable[V])]
这个算子和group类似,不过和它不同的是他不接收一个函数,而是直接将键值对类型的数据的key作为group的key 值。同样的,他也可以接收其他参数比如说partitioner
val a = sc.parallelize(List("dog", "tiger", "lion", "cat", "spider", "eagle"), 2)
val b = a.keyBy(_.length) //将字符串的长度作为key值。
b.groupByKey.collect //根据相同key值来进行group操作
res11: Array[(Int, Seq[String])] = Array((4,ArrayBuffer(lion)), (6,ArrayBuffer(spider)), (3,ArrayBuffer(dog, cat)), (5,ArrayBuffer(tiger, eagle)))
3. mapValues
同基本转换操作中的map,只不过mapValues是针对[K,V]中的V值进行map操作。
val a = sc.parallelize(List("dog", "tiger", "lion", "cat", "panther", " eagle"), 2)
val b = a.map(x => (x.length, x))
b.mapValues("x" + _ + "x").collect
//结果
Array(
(3,xdogx),
(5,xtigerx),
(4,xlionx),
(3,xcatx),
(7,xpantherx),
(5,xeaglex)
)
关注公众号
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
《叶问》第4期
2018年7月4日,周三 如何优化Linux操作系统用于MySQL环境? 一、初级玩法 1、在BIOS及内核层面关闭NUMA 2、在BIOS层面将CPU、内存均设置最大性能模式 3、 在BIOS层面关闭CPU节能模式 4、修改IO Scheduler为deadline 或 noop 5、使用xfs文件系统,挂载选项noatime、nodiratime、nobarrier 6、在内核层面设置vm.swappiness<=5,vm.dirty_ratio<=10, vm.dirty_background_rati<=5 7、在内核层面修改用户可最大打开文件数和线程数为65535 8、禁用SWAP分区 二、高端玩法 1、使用最新稳定Linux发行版 2、升级各个硬件设备到最新稳定firmware版本 3、 使用SSD时,开启TRIM功能,并且可以的话文件系统block size和SSD对齐 4、 当磁盘I/O存在瓶颈时,除了常规因素外,还需要关注中断不均衡的可能性 2018年7月5日,周四 MySQL 8.0 InnoDB哪些新特性你最期待,为什么? 1、数据字典全部采用I...
-
下一篇
Google MapReduce到底解决什么问题?
搞架构的人,Google的架构论文是必看的,但好像大家都不愿意去啃英文论文。故把自己的读书笔记,加入自己的思考,分享给大家。 第二篇,Google MapReduce架构启示(上)。 很多时候,定义清楚问题比解决问题更难。 什么是MapReduce? 它不是一个产品,而是一种解决问题的思路,它有多个工程实现,Google在论文中也给出了它自己的工程架构实现。 MapReduce这个编程模型解决什么问题? 能够用分治法解决的问题,例如: ● 网页抓取 ● 日志处理 ● 索引倒排 ● 查询请求汇总 ● … 画外音:能够发现,现实中有许多基于分治的应用需求。 为什么是Google,发明了这个模型? Google网页抓取,分析,倒排的多个应用场景,当时的技术体系,解决不了Google大数据量高并发量的需求,Google被迫进行技术创新,思考出了这个模型。 画外音:谁痛谁想办法。 为什么MapReduce对“能够用分治法解决的问题”特别有效? 分治法,是将一个大规模的问题,分解成多个小规模的问题(分),多个小规模问题解决,再统筹小问题的解(合),就能够解决大规模的问题。 画外音:分治法...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS6,CentOS7官方镜像安装Oracle11G
- Docker容器配置,解决镜像无法拉取问题
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS8编译安装MySQL8.0.19
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2全家桶,快速入门学习开发网站教程
- Linux系统CentOS6、CentOS7手动修改IP地址

微信收款码
支付宝收款码