spark-core 分析电影数据

本文介绍如何使用Apache Spark处理和分析电影评分数据集,包括指定电影的观众年龄和性别分布分析,以及热门电影top10中观众年龄在18-27岁间的偏好。通过加载数据、过滤、聚合等步骤,展示了Spark在大数据处理上的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

spark-core 分析电影数据

数据下载地址

http://files.grouplens.org/datasets/movielens/ml-1m.zip

数据说明
  • users.dat

UserID::Gender::Age:Occupation:Zip-code

用户号::性别:年龄:职业:邮政编码

  • movies.dat

MovieID::Title::Genres

电影号::标题::流派

  • ratings.dat

UerID::MoviesID::Rating::Timestamp

UerID:: MoviesID::评级::时间戳

指定电影的观众年龄和性别分布
  • 获取用户数据,拿出需要的信息
  • 获取评级数据,对电影过滤,join用户数据。
  • 对sex,age做聚合,得出分布。
package com.caiw.movie

import org.apache.spark._
import org.apache.spark.sql.SparkSession

object SparkWithMov {


    def main(args: Array[String]) {
      val ss = SparkSession.builder().appName("movieAnalysis").master("local").getOrCreate()
      val sc = ss.sparkContext
      //1.加载数据
      val MOVIE_ID = "999"
      val usersRdd = sc.textFile("spark/src/main/resources/ml-1m/users.dat")
      val ratingsRdd = sc.textFile("spark/src/main/resources/ml-1m/ratings.dat")

      //2.获取用户ID,sex,age
      val users = usersRdd.map(_.split("::")).map { x =>
        (x(0), (x(1), x(2)))
      }

      //3.拿到指定movie的用户,并对用户的age和sex进行聚合
      val userMov = ratingsRdd
        .map(_.split("::"))
        .map { x =>(x(0), x(1))}
        .filter(_._2.equals(MOVIE_ID))
        .join(users)
        .map { x =>(x._2._2, 1)}
        .reduceByKey(_ + _)

      //5.输出结果
      userMov
        .collect
        .foreach(x => println("性别:"+x._1._1+",年龄:"+x._1._2+",观看人数:"+x._2))

      ss.stop()
    }
}
热门电影top10(观众年龄18-27)
  • 获取用户数据,排除范围外的用户
  • 用户数据join评级数据拿到电影ID
  • 通过电影ID拿到电影信息,通过Name聚合并取出top10
package com.caiw.movie

import org.apache.spark.sql.SparkSession

object SparkWithMov02 {
  def main(args: Array[String]): Unit = {
    val ss = SparkSession.builder().master("local[4]").appName("top10").getOrCreate()

    //获取年龄在18-24之间的观众
    val users = ss.read
      .text("spark/src/main/resources/ml-1m/users.dat")
      .rdd
      .map {
        row =>
          val strs = row.get(0).toString.split("::")
          strs(0) -> strs(2)
      }
      .filter(18 <= _._2.toInt)
      .filter(_._2.toInt <= 27)

    //通过观众ID 找到观众看过的movieID
    val movieId = ss.read
      .text("spark/src/main/resources/ml-1m/ratings.dat")
      .rdd
      .map{
        row =>
          val strs = row.get(0).toString.split("::")
          strs(0)->strs(1)
      }
      .join(users)
      .map(x => x._2)

    //通过movie拿到电影名字,根据电影名聚合拿到观看次数并取出前10
    ss.read
      .text("spark/src/main/resources/ml-1m/movies.dat")
      .rdd
      .map{
        row =>
          val strs = row.get(0).toString.split("::")
          strs(0) -> strs(1)
      }
      .join(movieId)
      .map(xx => (xx._1,1))
      .reduceByKey(_+_)
      .sortBy(_._2,ascending = false)
      .take(10)
      .foreach(cc => println(cc._1+"\t"+cc._2))

    ss.stop()
  }
}
<think>我们正在寻找关于Spark数据分析的课程设计资料或教程。根据用户的需求,我们可以从以下几个方面提供帮助:1.课程设计主题:介绍常见的Spark课程设计主题,如实时数据处理、机器学习应用等。2.教程和资料:推荐一些书籍、在线教程或项目示例。3.技术栈:涉及的技术组件,如SparkCoreSparkSQL、SparkStreaming等。4.示例项目:给出一些具体的课程设计示例,包括项目描述和实现步骤。根据引用内容,我们有以下参考:引用[1]提到了一本书,内容包括Scala编程基础、Spark框架全生态体验、SparkRDD、SparkSQL、Kafka、SparkStreaming、SparkML、SparkGraphX、Redis等,并通过两个综合项目进行实战提升。这本书可以作为课程设计的参考资料。引用[2]和[3]分别提到了Spark在推荐系统和股票预测系统中的应用,这些都是课程设计的常见主题。引用[4]提到了一份Spark数据分析复习资料,其中包括一些操作示例(如map、reduceByKey、sortBy)和开发环境配置。因此,我们可以向用户推荐一些课程设计的方向和具体资源。回答结构:1.推荐课程设计主题2.推荐书籍和在线资源3.提供课程设计示例(选择一个简单的示例进行详细说明)4.给出开发环境配置建议</think>### Spark数据分析课程设计资料与教程 根据您的需求,以下是Spark数据分析的课程设计资源和教程推荐,结合引用资料和实际应用场景: #### 一、推荐课程设计主题 1. **实时广告点击分析系统** - 技术栈:Spark Streaming + Kafka + Redis - 实现功能:实时统计广告点击量、用户行为分析、热门广告排名 - 参考引用[1][4]的实时数据处理框架 2. **电影影评情感分析系统** - 技术栈:Spark ML + Spark SQL + Vue.js可视化 - 实现功能:影评情感分类、关键词提取、评分预测 - 参考引用[1][3]的综合项目案例 3. **股票价格预测系统** - 技术栈:Spark MLlib + TensorFlow/PyTorch + ECharts - 实现功能:历史数据清洗、LSTM模型训练、价格趋势可视化 - 参考引用[3]的深度学习集成方案 #### 二、教程与资料推荐 1. **书籍教材** -Spark数据分析实战》[^1] 涵盖Spark全生态技术(RDD/SQL/Streaming/ML/GraphX),包含两个综合项目实战(广告分析和影评分析),适合课程设计参考。 2. **在线教程** - **Spark官方文档**:[spark.apache.org/docs/latest](https://spark.apache.org/docs/latest/) 含Scala/Python/Java API详解及代码示例。 - **Databricks学习平台**:[docs.databricks.com](https://docs.databricks.com/learn.html) 提供交互式Spark实验环境(含免费版)。 3. **项目资源** - **GitHub示例仓库**: - [Spark课程设计模板](https://github.com/spark-examples)(含电商分析、交通流量预测等) - [电影推荐系统](https://github.com/jadianes/spark-movie-lens)(基于协同过滤) - **Kaggle数据集+Notebook**: - [纽约出租车数据分析](https://www.kaggle.com/code/angellapeng/spark-taxi-trip-eda)(使用Spark SQL和ML) #### 三、开发环境配置(参考引用[4]) | 组件 | 推荐版本 | 作用 | |-------------|------------|--------------------------| | Scala | 2.12.x | Spark核心编程语言 | | JDK | 1.8+ | 运行环境 | | Spark | 3.3.x | 分布式计算框架 | | Hadoop | 3.3.x | 分布式存储支持 | | IDEA | 2023+ | 开发IDE(安装Scala插件) | | Spark Shell | - | 交互式调试 | #### 四、基础代码示例(词频统计) ```scala // Spark Shell中运行 val textRDD = sc.textFile("hdfs:///data/sample.txt") val wordCounts = textRDD .flatMap(line => line.split(" ")) // 分词 .map(word => (word, 1)) // 映射键值对 .reduceByKey(_ + _) // 按键聚合 .sortBy(_._2, ascending = false) // 按频次排序 wordCounts.take(10).foreach(println) // 输出前10高频词 ``` #### 五、课程设计步骤建议 1. **需求分析**:明确分析目标(如实时/离线、预测/统计) 2. **技术选型**:选择Spark子框架(Streaming/SQL/MLlib) 3. **数据准备**:使用`spark.read`加载CSV/JSON/HDFS数据 4. **算法实现**: - 批处理:RDD转换操作(`map/filter/reduceByKey`) - 实时:`KafkaUtils.createDirectStream`[^4] - 机器学习:`Pipeline`构建训练流程[^3] 5. **可视化**:用`ECharts+Vue.js`生成动态图表[^3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值