spark通过combineByKey算子实现条件性聚合的方法
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,实际开发过程中遇到了需要实现选择性聚合的场景,即对于某一个key对应的数据,将满足条件的记录进行聚合,不满足条件的则不进行聚合。使用spark处理这种计算场景时,想到了使用combineByKey算子
千家信息网最后更新 2026年11月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安全错误
数据库的锁怎样保障安全
万易互联网科技
西安互联网科技
智网互联网科技
互联网科技媒体
云电互联网科技
时间互联网络科技
新浪科技互联网
猫创互联网科技
国外互联网科技网站
互联网科技类展会
滨湖区互联网智能科技产品供应
中国的互联网科技企业的崛起
成都互联网科技公司100强
广州市恰铎互联网科技有限公司
互联网在线教育科技创业
四川慕妮娅互联网科技有限公司
华中科技大学互联网的牛人
科技互联网的核心竞争力
21世纪互联网科技成就
米泉互联网科技专业怎么样
亿人帮互联网科技有限公司
河南云网互联网络科技有限公司
苏州找大状互联网科技有限公司
互联网高科技股票
居家互联网科技有限公司
米聚互联网科技南京有限公司排面
山东有哪些互联网科技公司
版纳互联网科技选哪家
保山浩联互联网科技有限公司
科技互联网专业务虚会材料