在 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]
我有一个自定义案例 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]