我有一个自定义案例对象的RDD,格式为
{userId:"h245hv45uh", title: "The-BFG", seen: 1, timestamp: 2016-08-06 13:19:53.051000+0000}
有没有什么方法可以对具有相同userId和title的所有行进行分组,然后在新的RDD中创建一个具有相同userId和title但却添加了所有'see'值的行?
{userId:"h245hv45uh", title: "The-BFG", seen: 71, timestamp: 2016-08-06 13:19:53.051000+0000}
像那样^如果有71行具有相同的userId和title?
原始RDD有几个标题和用户ID,我正在尝试聚合分数,过滤匹配的userIds和标题
由于
答案 0 :(得分:2)
您可以尝试将其转换为配对RDD,然后使用reduceByKey
:
def combFunc(cc1: CaseClass, cc2: CaseClass): CaseClass = {
cc1.copy(seen = cc1.seen + cc2.seen)
}
val newRDD = rdd
.map( i => ((i.userId, i.title), i) ) // converting into a PairRDD
.reduceByKey(combFunc) // reducing by key
.values // converting back to an RDD[CaseClass]