spark通过combineByKey算子实现条件性聚合的方法
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,实际开发过程中遇到了需要实现选择性聚合的场景,即对于某一个key对应的数据,将满足条件的记录进行聚合,不满足条件的则不进行聚合。使用spark处理这种计算场景时,想到了使用combineByKey算子
千家信息网最后更新 2025年12月02日spark通过combineByKey算子实现条件性聚合的方法
实际开发过程中遇到了需要实现选择性聚合的场景,即对于某一个key对应的数据,将满足条件的记录进行聚合,不满足条件的则不进行聚合。
使用spark处理这种计算场景时,想到了使用combineByKey算子,先将输入数据中的value映射成含一个元素的ArrayBuffer(scala中相当于java中的ArrayList),然后在聚合时对满足聚合条件的记录聚合后覆盖这一个ArrayBuffer,不满足条件的待聚合的两条记录都填入ArrayBuffer。最后调用flatMap将ArrayBuffer中的元素分拆。
比如下面的代码实现了对某个字段聚合时,按照时间条件进行选择性的聚合:
val rdd1 = sc.textFile(dayDayDir).union(sc.textFile(thisDayDir)) .map(line => line.split("\\|")) .filter(arr => if(arr.length != 14 || !arr(3).substring(0, 8).equals(lastDay)) false else true) .map(arr => (arr(0), arr)) .reduceByKey( (pure, after) => reduceSession(pure, after)) .map(tup => (tup._2(13), tup._2)) .combineByKey( x => ArrayBuffer(x), (x:ArrayBuffer[Array[String]],y) => combineMergeValue(x, y), (x:ArrayBuffer[Array[String]],y:ArrayBuffer[Array[String]]) => combineMergeCombiners(x, y)) .flatMap(tup => arrToStr(tup._2))def combineMergeValue(x:ArrayBuffer[Array[String]], y:Array[String]) : ArrayBuffer[Array[String]] = { var outList = x.clone() var outarr = y.clone() var flag = true for(i <- 0 until outList.length){ if(checkTime(outList(i)(3), outList(i)(4), y(3), y(4))) { outarr = reduceSession(outList(i), y) outList(i) = outarr flag = false } } if(flag) { outList += y } outList}def combineMergeCombiners(x:ArrayBuffer[Array[String]], y:ArrayBuffer[Array[String]]) : ArrayBuffer[Array[String]] = { var outList = x.clone(); for(i <- 0 until y.length){ var outarr = y(i).clone() var flag = true for(j <- 0 until outList.length){ if(checkTime(outList(j)(3), outList(j)(4), y(i)(3), y(i)(4))) { outarr = reduceSession(outList(j), y(i)) outList(j) = outarr flag = false } } if(flag) { outList += y(i) } } outList}
条件
元素
场景
数据
选择性
合时
选择
算子
代码
字段
实际
时间
过程
面的
先将
处理
开发
输入
方法
条件性
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
在vs里控件链接数据库
数据库中的内容写到xml
江西理工无线网络技术考试
中国网络安全协会是事业单位吗
做软件开发系统开发电脑价位
gui数据库和tomcat
游戏开发跟软件开发哪个更难
怎么在电脑上看网络安全直播课
苏州数据网络技术哪家好
苹果app数据库怎么不显示
数据库 逆向
网络安全小知识画报
红包夺宝软件开发
网络安全攻防演练动员讲话
惠州市益佳网络技术有限公司
成为网络安全工程师
软件开发基础面试题
离散数学试卷软件开发
华赖云服务器
数据库中的实际点数
免费ssr 服务器订阅
四川省网络安全网站
mysql数据库有个默认用户
租号玩服务器忙
游戏违规数据库是什么原因
服务器键盘不识别
银行国家网络安全活动方案
联通小燕无线网络技术
广州中人网络技术官网
网络安全宣传周山东