在 Apache Spark 中,如何按两个共享值对 RDD 的所有行进行分组?

In Apache Spark how can I group all the rows of an RDD by two shared values?

我有一个自定义案例 object 的 RDD,其形式为

{userId:"h245hv45uh", title: "The-BFG", seen: 1, timestamp: 2016-08-06 13:19:53.051000+0000}

有什么方法可以将具有相同 userId 和标题的所有行分组,然后在具有相同 userId 和标题但添加了所有 'seen' 值的新 RDD 中创建一行?

{userId:"h245hv45uh", title: "The-BFG", seen: 71, timestamp: 2016-08-06 13:19:53.051000+0000}

像那样^ 如果有 71 行具有相同的用户 ID 和标题?

原始 RDD 有多个标题和用户 ID,我正在尝试汇总分数,过滤匹配的用户 ID 和标题

谢谢

您可以尝试将其转换为 Pair 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]