实际开发过程中遇到了需要实现选择性聚合的场景,即对于某一个key对应的数据,满足条件的记录进行聚合,不满足条件的则不聚合。
使用spark处理这种计算场景时,想到了使用combineByKey算子,先将输入数据中的value映射成含一个元素的ArrayBuffer(scala中相当于java中的ArrayList),然后在聚合时对满足聚合条件的记录聚合后覆盖这一个ArrayBuffer,不满足条件的待聚合的两条记录都填入ArrayBuffer。最后调用flatMap将ArrayBuffer中的元素分拆。
原文地址:http://blog.51cto.com/11091005/2120619
时间: 2024-10-26 09:52:32