影评项目

打印并求出电影评分最高的前十电影名和平均分
package movies

import org.apache.spark.SparkContext
import org.apache.spark.rdd.RDD
import org.apache.spark.sql.SparkSession

object RDD_Movie_User_Analyzer {
  def main(args: Array[String]): Unit = {
    //获取SparkSession
    val spark = SparkSession.builder()
      .appName("movie")
      .master("local")
      .getOrCreate()
    //获取上下文联系对象
    val sc: SparkContext = spark.sparkContext
    //从HDFS获取数据
    val usersRDD = sc.textFile("hdfs://10.0.157.167/data/users.dat")
    val moviesRDD = sc.textFile("hdfs://10.0.157.167/data/movies.dat")
    val ratingRDD = sc.textFile("hdfs://10.0.157.167/data/ratings.dat")
    /**
      * 思路:
      * 1.对评论RDD进行切分,取得电影名和评分
      * 2.按照电影名进行分组(key,iterator(评分1,评分2,评分。。。))
      * 3.对二元组进行重新整合 先将迭代器转list集合,求集合内的元素和和个数,得到平均分
      * 4.返回结果(电影名,平均分)
      * 
     */
    val gk: RDD[(String, Iterable[Double])] = ratingRDD.map(_.split("::")).map(x =>(x(1),x(2).toDouble)).groupByKey()
    val rdd2: RDD[(String, Double)] = gk.map(x => {
      val movie = x._1
      val list: List[Double] = x._2.toList
      val sum: Double = list.sum
      val len = list.size
      (movie, sum / len)
    })
    /**
      * 对电影数据进行处理
     */
    val movie = moviesRDD.map(_.split("::")).map(x =>(x(0),x(1)))
    /**
      * 电影RDD与结果RDD进行join得到(movieID,(电影名,评分))
      * 处理上述处理结果得到三元组
      */
    val res: RDD[(String, String, Double)] = rdd2.join(movie).map(x => {
      val id = x._1
      val moviename = x._2._2
      val rat = x._2._1
      (id, moviename, rat)

    })
    /**
      * 按照评分进行排序取前10 
      */
   val rdd4 = res.sortBy(_._3,false).take(10)
    //打印结果
    rdd4.foreach(x => println("id:" + x._1 + ",电影名:" + x._2 + ",电影评分:" + x._3))

    //释放资源
    spark.stop()
  }

}

                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、需求分析 1.1 项目背景 豆瓣是一个综合性的社交网站,既是一个电影、图书、音乐等文艺作品的评价平台,也是一个用户之间互相交流的社交平台。豆瓣电影是其中最受欢迎的板块之一,用户可以在上面查看电影信息、评分、电影评论等。 1.2 项目目标 本项目的目标是使用Python爬虫技术爬取豆瓣电影的影评信息,包括电影名称、评分、评论、评论人等,并将其存储至数据库中。同时,设计一个简单的Web应用程序,实现对这些影评信息的查询和展示。 1.3 项目需求 1.3.1 数据爬取需求 1. 爬取豆瓣电影影评信息,包括电影名称、评分、评论、评论人等。 2. 爬取的数据需要存储在数据库中,以便后续的查询和展示。 1.3.2 Web应用程序需求 1. 查询功能:用户可以通过输入电影名称、评分等条件进行查询。 2. 展示功能:将查询结果以列表的形式展示出来,包括电影名称、评分、评论、评论人等信息。 3. 界面设计:设计一个简洁、美观的界面,方便用户进行查询和浏览。 1.4 项目限制 1.4.1 爬虫限制 1. 程序需要模拟浏览器行为,以避免被豆瓣封禁。 2. 爬取的数据需要存储在数据库中,不能频繁地向豆瓣服务器发送请求,以免对豆瓣服务器造成过大的负担。 1.4.2 Web应用程序限制 1. 界面需要简洁、美观、易于操作。 2. 查询结果需要快速展示,不能因为数据量过大而导致页面加载缓慢。 二、项目设计 2.1 数据库设计 本项目使用SQLite数据库,数据库包含一张表格,表格中包含以下字段: id:主键,自增长。 movie_name:电影名称。 movie_score:电影评分。 movie_comment:电影评论。 comment_user:评论人。 2.2 程序结构设计 本项目分为两个部分:数据爬取和Web应用程序。 2.2.1 数据爬取 1. 爬取器:使用Python爬虫技术,通过豆瓣API获取电影信息,包括电影名称、评分、评论、评论人等,并将数据存储至SQLite数据库中。 2. 数据库管理器:管理SQLite数据库,提供数据的增删改查功能。 2.2.2 Web应用程序 1. 查询管理器:对数据库进行查询操作,根据用户输入的条件生成查询语句,返回查询结果。 2. 界面管理器:使用Flask框架设计一个简洁、美观、易于操作的Web界面,展示查询结果。 3. 整合管理器:将查询管理器和界面管理器整合在一起,提供完整的查询和展示功能。 2.3 程序流程设计 2.3.1 数据爬取流程 1. 获取电影列表:使用豆瓣API获取电影列表,包括电影名称、评分等信息。 2. 获取影评信息:根据电影列表,使用豆瓣API获取电影的影评信息,包括评论、评论人等。 3. 存储数据:将获取到的电影信息和影评信息存储至SQLite数据库中。 2.3.2 Web应用程序流程 1. 用户输入查询条件:用户在Web界面中输入电影名称、评分等条件进行查询。 2. 生成查询语句:根据用户输入的条件,生成查询语句。 3. 查询数据库:使用查询语句查询SQLite数据库,返回查询结果。 4. 展示查询结果:将查询结果以列表的形式展示在Web界面中。 2.4 UML建模设计 以下是本项目的UML建模设计图: ![image](https://user-images.githubusercontent.com/87290327/131387025-c5c5e5a5-5d0d-4b21-9f30-9e5f5b5d5b5d.png) 三、总结 本项目通过需求分析和设计,使用Python爬虫技术,完成了对豆瓣电影影评信息的爬取,并设计了一个简单的Web应用程序,实现了对这些影评信息的查询和展示。通过UML建模工具的使用,更好地展示了项目的结构和流程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值