【问题标题】:In Apache Spark how can I group all the rows of an RDD by two shared values?在 Apache Spark 中,如何按两个共享值对 RDD 的所有行进行分组?
【发布时间】:2026-01-08 05:10:02
【问题描述】:

我有一个自定义案例对象的 RDD,其格式为

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

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

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

这样 ^ 如果有 71 行具有相同的 userId 和标题?

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

谢谢

【问题讨论】:

    标签: scala apache-spark cassandra rdd


    【解决方案1】:

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

    【讨论】:

      最近更新 更多