首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Apache中,如何将RDD的所有行按两个共享值分组?

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

Stack Overflow用户
提问于 2016-08-07 17:26:32
回答 1查看 899关注 0票数 3

我有一个自定义case对象的RDD,它的形式是

代码语言:javascript
复制
{userId:"h245hv45uh", title: "The-BFG", seen: 1, timestamp: 2016-08-06 13:19:53.051000+0000}

有没有办法将所有具有相同userId和标题的行分组,然后使用相同的userId和标题在新的RDD中创建一个行,但添加所有“查看”值?

代码语言:javascript
复制
{userId:"h245hv45uh", title: "The-BFG", seen: 71, timestamp: 2016-08-06 13:19:53.051000+0000}

那么,如果有71行具有相同的userId和标题呢?

最初的RDD有几个标题和用户I,我试图聚合分数,过滤以匹配userIds和标题

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-07 18:19:52

您可以尝试将其转换为一对RDD,然后使用reduceByKey

代码语言:javascript
复制
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]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38816718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档