栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

spark操作mongodb 遇到的问题

spark操作mongodb 遇到的问题

我需要从一个

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)

表示升序排列

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/734502.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号