我正在学习spark,假设我们有以下Dataframe
用户ID活动1 liked2 comment1 liked1 liked1 comment2 liked
每种类型的活动都有自己的权重,用于计算得分
活动权重1社区3
这就是期望的输出
用户idscore1624
分数的计算包括计算一个事件发生的次数以及它们的权重。例如,用户1执行3个likes和一条评论,因此权重由
(3 * 1) + (1 * 3)
如何在spark中进行此计算?
我的初步尝试如下
val df1 = evidenceDF
.groupBy("user_id")
.agg(collect_set("event") as "event_ids")
但我被Map部分卡住了。我想要实现的是在我将事件聚合到 event_ids
字段中,我将拆分它们并在一个Map函数中进行计算,但我很难进一步移动。
我搜索了关于使用自定义聚合器函数的信息,但听起来很复杂,有没有一种直接的方法可以做到这一点?
1条答案
按热度按时间vfh0ocws1#
您可以使用权重数据框联接分组依据和权重总和:
或者如果你实际上只有两个类别,那么使用
when
直接在sum
: