欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

spark操作mongodb遇到的问题

时间:2023-06-23

我需要从一个

case class Rating(val uid: Int, val mid: Int, val score: Double, val timestamp: Int)

表中取出用户最近看过的10个电影的数据

难点:需要的不是一个用户是所有用户

case class介绍

样例类(case class)适合用于不可变的数据。它是一种特殊的类,能够被优化以用于模式匹配。

 

首先创建两个样例类

case class RentlyMovie(val mid: Int, val score: Double, val timestamp: Int)

 

case class UserRentlyMovie(val uid: Int, recs: Seq[RentlyMovie])

 编写业务逻辑

import spark.implicits._ val redisData = spark.read .option("uri", config("mongo.url")) .option("collection", MONGODB_RATING_COLLECTION) .format("com.mongodb.spark.sql") .load() .as[Rating] .rdd.groupBy(x => x.uid).map { x => UserRentlyMovie(x._1, x._2.toList.map((x => RentlyMovie(x.mid, x.score, x.timestamp))).sortBy(x => x.timestamp)(Ordering.Int.reverse).take(10)) } .toDF().persist()

sortBy()函数介绍:

*.sortBy(x => x.timestamp)(Ordering.Int.reverse)

表示降序排列

*.sortBy(x => x.timestamp)(Ordering.Int)

表示升序排列

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。