Spark算子篇 --Spark算子之combineByKey详解
一。概念
rdd.combineByKey(lambda x:"%d_" %x, lambda a,b:"%s@%s" %(a,b), lambda a,b:"%s$%s" %(a,b))三个参数(都是函数)第一个参数:给定一个初始值,用函数生成初始值。第二个参数:combinbe聚合逻辑。第三个参数:reduce端聚合逻辑。
二。代码
from pyspark.conf import SparkConf from pyspark.context import SparkContext conf = SparkConf().setMaster("local").setAppName("CombineByKey") sc = SparkContext(conf = conf) rdd = sc.parallelize([("A",1),("B",2),("B",3),("B",4),("B",5),("C",1),("A",2)], 2) def f(index,items):print "partitionId:%d" %indexfor val in items:print valreturn items rdd.mapPartitionsWithIndex(f).count()combinerRDD = rdd.combineByKey(lambda x:"%d_" %x, lambda a,b:"%s@%s" %(a,b), lambda a,b:"%s$%s" %(a,b)) combinerRDD.foreach(p) groupByKeyRDD.foreach(p)sc.stop()
三。解释
第一个函数作用于每一个组的第一个元素上,将其变为初始值
第二个函数:一开始a是初始值,b是分组内的元素值,比如A[1_],因为没有b值所以不能调用combine函数,第二组因为函数内元素值是[2_,3]调用combine函数后为2_@3,以此类推
第三个函数:reduce端大聚合,把相同的key的数据拉取到一个节点上,然后分组。
四。结果
五。拓展
1.用combinebykey实现groupbykey的逻辑
1.1 combinebykey的三个参数
第一个应该返回一个列表,初始值
第二个函数中的a依赖于第一个函数的返回值
第三个函数的a,b依赖于第二个函数的返回值
1.2 解释:
1.3 代码:
def mergeValue(list1,b):list1.append(b)return list1def mergeCombiners(list1,list2):list1.extend(list2)return list1groupByKeyRDD = rdd.combineByKey(lambda a:[a],mergeValue,mergeCombiners)
1.4结果
2.使用combineBykey把相同的key和对应的逻辑相加起来
代码:
reduceByKeyRDD = rdd.combineByKey(lambda a:a,lambda a,b:a+b,lambda a,b:a+b)
结果:
持续更新中。。。。,欢迎大家关注我的公众号LHWorld.
转载于:https://www.cnblogs.com/LHWorldBlog/p/8215705.html
Spark算子篇 --Spark算子之combineByKey详解相关推荐
- [Python从零到壹] 四十七.图像增强及运算篇之腐蚀和膨胀详解
欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...
- PowerShell攻防进阶篇:nishang工具用法详解
PowerShell攻防进阶篇:nishang工具用法详解 导语:nishang,PowerShell下并肩Empire,Powersploit的神器. 开始之前,先放出个下载地址! 下载地址:htt ...
- 离线强化学习(Offline RL)系列3: (算法篇) IQL(Implicit Q-learning)算法详解与实现
[更新记录] 论文信息:Ilya Kostrikov, Ashvin Nair, Sergey Levine: "Offline Reinforcement Learning with Im ...
- 玩转Mysql系列 - 第22篇:mysql索引原理详解
Mysql系列的目标是:通过这个系列从入门到全面掌握一个高级开发所需要的全部技能. 欢迎大家加我微信itsoku一起交流java.算法.数据库相关技术. 这是Mysql系列第22篇. 背景 使用mys ...
- Spark RDD、DataFrame原理及操作详解
RDD是什么? RDD (resilientdistributed dataset),指的是一个只读的,可分区的分布式数据集,这个数据集的全部或部分可以缓存在内存中,在多次计算间重用. RDD内部可以 ...
- Spark Streaming初步使用以及工作原理详解
一.流式计算 1.什么是流? Streaming:是一种数据传送技术,它把客户机收到的数据变成一个稳定连续的 流,源源不断地送出,使用户听到的声音或看到的图象十分平稳,而且用户在 整个文件送完之前 ...
- 合辑 | 面试必备!18篇Java面试疑难点详解
简介: 就目前就业环境来看,学习Java软件开发是不会过时的,据各大招聘网站统计,Java程序员的需求10年来一直跃居首位.本节小编汇总了18篇Java面试相关的疑难点解析,知识点+理论详解帮助你稳扎 ...
- 【网络原理篇2】TCP报头详解
在这一篇文章当中,了解到TCP是属于传输层的协议:当数据从应用层向传输层发送的时候,如果使用的是TCP协议,那么就需要把应用层的数据加上TCP报头.初识网络:IP.端口.网络协议.TCP-IP五层模型 ...
- 黑猫带你学eMMC协议第7篇:eMMC各种寄存器详解(register)
1 前言 1.1 声明 本文依据eMMC JEDEC5.1及个人工作经验整理而成,如有错误请留言. 文章为个人辛苦整理,付费内容,禁止私自转载. 文章所在专栏:<黑猫带你学:eMMC协议详解&g ...
- (转) SpringBoot非官方教程 | 第二篇:Spring Boot配置文件详解
springboot采纳了建立生产就绪spring应用程序的观点. Spring Boot优先于配置的惯例,旨在让您尽快启动和运行.在一般情况下,我们不需要做太多的配置就能够让spring boot正 ...
最新文章
- 手机客户端连接linux
- Qt Creator使用Qt Quick工具栏
- c++大文本比较_Excel – 将文本转换为数值,第二种方法会的请举左手
- 使用Spring Integration轮询http端点
- 【计算机组成原理】总线
- 笑着学会Linux 系统之故障排查
- csp 201712-1 最小差值
- iOS 13 暗黑模式的适配
- html缩放背景不缩放_如何在缩放通话中静音
- 腾讯翻译君在线翻译怎么翻译整个文件_希腊语怎么翻译?教你两个超实用的翻译方法...
- Java实现 蓝桥杯VIP 算法提高 字符串跳步
- 计算机打不开guest用户,win10系统打不开guest账户的解决方法
- [经验] 我想加入阿里,我该怎么做
- [软件安装] 动态图像录制工具LICEcap
- Vue + TypeScript + Element 搭建简洁时尚的博客网站及踩坑记
- 十大人文科技类图书(转)
- 基于cling2.0的Android DLNA/Upnp客户端基本开发成功
- 计算机网络——计算机网络常见面试题总结
- bpython ipython 区别_python-IPython Noteb
- h264 sei信息 解码_关于H264编码数据中SPS,PPS,SEI,IDR等内容的问题
热门文章
- java监听焦点事件_【Java Swing公开课|Java Swing焦点事件监听器怎么用,看完这篇文章你一定就会了】- 环球网校...
- anaconda和python区别_初学 Python 者自学 Anaconda 的正确姿势是什么?
- bootstrap-table toolbar图标换文字_iPhone 也能随意换字体啦~
- python异步框架twisted_Python学习八十七天:使用异步的twisted框架写入数据
- c语言龙贝格积分法实验报告,数值作业:龙贝格算法计算积分C语言实现
- mysql 结果集什么意思_结果集中的mysql“和”逻辑
- 解决VS2013或2017中类似于:error C4996: 'scanf': This function or variable may be unsafe的问题
- java encode 空格_javaWeb中URLEncoder.encode空格问题
- linux下drcom无法上网,drcom为什么还是不能上网啊!
- curl 的用法指南