一。概念

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详解相关推荐

  1. [Python从零到壹] 四十七.图像增强及运算篇之腐蚀和膨胀详解

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  2. PowerShell攻防进阶篇:nishang工具用法详解

    PowerShell攻防进阶篇:nishang工具用法详解 导语:nishang,PowerShell下并肩Empire,Powersploit的神器. 开始之前,先放出个下载地址! 下载地址:htt ...

  3. 离线强化学习(Offline RL)系列3: (算法篇) IQL(Implicit Q-learning)算法详解与实现

    [更新记录] 论文信息:Ilya Kostrikov, Ashvin Nair, Sergey Levine: "Offline Reinforcement Learning with Im ...

  4. 玩转Mysql系列 - 第22篇:mysql索引原理详解

    Mysql系列的目标是:通过这个系列从入门到全面掌握一个高级开发所需要的全部技能. 欢迎大家加我微信itsoku一起交流java.算法.数据库相关技术. 这是Mysql系列第22篇. 背景 使用mys ...

  5. Spark RDD、DataFrame原理及操作详解

    RDD是什么? RDD (resilientdistributed dataset),指的是一个只读的,可分区的分布式数据集,这个数据集的全部或部分可以缓存在内存中,在多次计算间重用. RDD内部可以 ...

  6. Spark Streaming初步使用以及工作原理详解

    一.流式计算 1.什么是流? Streaming:是一种数据传送技术,它把客户机收到的数据变成一个稳定连续的  流,源源不断地送出,使用户听到的声音或看到的图象十分平稳,而且用户在  整个文件送完之前 ...

  7. 合辑 | 面试必备!18篇Java面试疑难点详解

    简介: 就目前就业环境来看,学习Java软件开发是不会过时的,据各大招聘网站统计,Java程序员的需求10年来一直跃居首位.本节小编汇总了18篇Java面试相关的疑难点解析,知识点+理论详解帮助你稳扎 ...

  8. 【网络原理篇2】TCP报头详解

    在这一篇文章当中,了解到TCP是属于传输层的协议:当数据从应用层向传输层发送的时候,如果使用的是TCP协议,那么就需要把应用层的数据加上TCP报头.初识网络:IP.端口.网络协议.TCP-IP五层模型 ...

  9. 黑猫带你学eMMC协议第7篇:eMMC各种寄存器详解(register)

    1 前言 1.1 声明 本文依据eMMC JEDEC5.1及个人工作经验整理而成,如有错误请留言. 文章为个人辛苦整理,付费内容,禁止私自转载. 文章所在专栏:<黑猫带你学:eMMC协议详解&g ...

  10. (转) SpringBoot非官方教程 | 第二篇:Spring Boot配置文件详解

    springboot采纳了建立生产就绪spring应用程序的观点. Spring Boot优先于配置的惯例,旨在让您尽快启动和运行.在一般情况下,我们不需要做太多的配置就能够让spring boot正 ...

最新文章

  1. 手机客户端连接linux
  2. Qt Creator使用Qt Quick工具栏
  3. c++大文本比较_Excel – 将文本转换为数值,第二种方法会的请举左手
  4. 使用Spring Integration轮询http端点
  5. 【计算机组成原理】总线
  6. 笑着学会Linux 系统之故障排查
  7. csp 201712-1 最小差值
  8. iOS 13 暗黑模式的适配
  9. html缩放背景不缩放_如何在缩放通话中静音
  10. 腾讯翻译君在线翻译怎么翻译整个文件_希腊语怎么翻译?教你两个超实用的翻译方法...
  11. Java实现 蓝桥杯VIP 算法提高 字符串跳步
  12. 计算机打不开guest用户,win10系统打不开guest账户的解决方法
  13. [经验] 我想加入阿里,我该怎么做
  14. [软件安装] 动态图像录制工具LICEcap
  15. Vue + TypeScript + Element 搭建简洁时尚的博客网站及踩坑记
  16. 十大人文科技类图书(转)
  17. 基于cling2.0的Android DLNA/Upnp客户端基本开发成功
  18. 计算机网络——计算机网络常见面试题总结
  19. bpython ipython 区别_python-IPython Noteb
  20. h264 sei信息 解码_关于H264编码数据中SPS,PPS,SEI,IDR等内容的问题

热门文章

  1. java监听焦点事件_【Java Swing公开课|Java Swing焦点事件监听器怎么用,看完这篇文章你一定就会了】- 环球网校...
  2. anaconda和python区别_初学 Python 者自学 Anaconda 的正确姿势是什么?
  3. bootstrap-table toolbar图标换文字_iPhone 也能随意换字体啦~
  4. python异步框架twisted_Python学习八十七天:使用异步的twisted框架写入数据
  5. c语言龙贝格积分法实验报告,数值作业:龙贝格算法计算积分C语言实现
  6. mysql 结果集什么意思_结果集中的mysql“和”逻辑
  7. 解决VS2013或2017中类似于:error C4996: 'scanf': This function or variable may be unsafe的问题
  8. java encode 空格_javaWeb中URLEncoder.encode空格问题
  9. linux下drcom无法上网,drcom为什么还是不能上网啊!
  10. curl 的用法指南