我对 apache-spark 和 scala 都很陌生,所以如果这是一个微不足道的问题,我深表歉意。
我正在尝试构建一个推荐系统,并拥有一个形式为(用户、产品、预测评级)的 RDD。
我想要实现的目标:
按用户分组,我想要一个产品列表(按评级降序排序),并根据此列表(针对每个用户)为预测分配排名。谁能告诉我如何才能实现这一目标?
下面的代码显然不起作用,但这就是我想要实现的目标
val xyz = ratesAndPreds.map{case ((user,product),(r1,r2)) => (user,product,r2)}
val def = xyz.sortBy(_._3)
val abc = abc.groupByKey()
任何帮助将不胜感激。
最佳答案
这应该可以解决问题:
val groupedByUser = xyz.groupBy(_._1)
val sortedProductsByUser = groupedByUser mapValues { triples =>
// this is done for every user, for its list of (user, product, rating)
// (yes, user is thus the same for all the elements of triples here)
val sortedTriples = triples.sortBy(_._3) // assuming rating has an Ordering, e.g., it's an Int
val keepOnlyProducts = sortedTriples.map(_._2)
keepOnlyProducts
}
关于scala - 按元组的第三个元素排序,然后按第一个元素分组并分配排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24369794/