基于spark+hadoop+hive大数据分析的电影推荐系统的设计与实现

💖🔥作者主页计算机毕设小程
精彩专栏推荐订阅:在 下方专栏👇🏻👇🏻👇🏻👇🏻

Java实战项目

一、开发介绍

1.1 开发环境

  • 技术栈:spark+hadoop+hive
  • 离线ETL+在线数据分析 (OLAP)+流计算+机器学习+图计算

二、系统介绍

2.1图片展示

用户注册登录模块:在这里插入图片描述
首页模块:在这里插入图片描述
电影信息模块:在这里插入图片描述

三、部分代码设计

3.1.部分代码如下:

package bigdata.scala.spark.streaming.task.testscalaapp

import bigdata.java.framework.spark.kafka.{
   SKProcessor, SimpleSparkKafka}
import org.apache.kafka.clients.consumer.ConsumerRecord
import org.apache.spark.streaming.api.java.JavaInputDStream

object ScalaDemo {
   
  def main(args: Array[String]): Unit = {
   
    //在idea中调试时,Program arguments 参数
    //appname:FindDataStreaming topics:yxgk.a_Cashchk_Flow duration:2 maxnum:2000
    //appname=应用程序名称
    //topics=消费的kafka主题,多个主题用逗号隔开
    //duration=每隔多少秒执行一个spark批次
    //maxnum=每个批次获取多少数据,每隔批次消费的总数据量等于分区数量*秒数*maxnum
    val simpleSparkKafka = new SimpleSparkKafka(args)
    simpleSparkKafka.execute(new SKProcessor {
   
      override def process(directStream: JavaInputDStream[ConsumerRecord[String, String]]): Unit = {
   
        val stream = directStream.inputDStream
        stream.foreachRDD{
   rdd=>
          rdd.foreachPartition {
    partitionOfRecods =>
            partitionOfRecods.foreach(println)
          }
        }
      }
    }).start()
  }
}
package bigdata.java.spark.streaming.task.datasynchro;

import bigdata.java.framework.spark.util.JsonUtil;
import bigdata.java.framework.spark.util.StrUtil;
import scala.Tuple3;

import java.util.List;

public class DataModel {
   

    /**
     * 表名
     */
    String table;
    /**
     * 主键
     */
    List<Tuple3<String,String,String>> primary_Keys;
    /**
     * 字段
     */
    List<Tuple3<String,String,String>> fields;
    /**
     * 操作类型
     */
    String op_Type;
    /**
     * sql语句
     */
    String sql;

    String json;

    public String getJson() {
   
        return json;
    }

    public void setJson(String json) {
   
        this.json = json;
    }

    public List<Tuple3<String, String, String>> getFields() {
   
        return fields;
    }

    public Tuple3<String, String, String> getPrimaryValue(String key)
    {
   
        for (int i = 0; i < primary_Keys.size(); i++) {
   
            Tuple3<String, String, String> tuple3 = primary_Keys.get(i);
            if(tuple3._1().equals(key))
            {
   
                return tuple3;
            }
        }
        return null;
    }

    public Tuple3<String, String, String> getFieldValue(String key)
    {
   
        for (int i = 0; i < fields.size(); i++) {
   
            Tuple3<String, String, String> tuple3 = fields.get(i);
            if(tuple3._1().equals(key))
            {
   
                return tuple3;
            }
        }
        return null;
    }

    public void setFields(List<Tuple3<String, String, String>> fields) {
   
        this.fields = fields;
    }

    public String getTable() {
   
        return table;
    }

    public void setTable(String table) {
   
        this.table = table;
    }

    public List<Tuple3<String,String,String>> getPrimary_Keys() {
   
        return primary_Keys;
    }

    public void setPrimary_Keys(List<Tuple3<String,String,String>> primary_Keys) {
   
        this.primary_Keys = primary_Keys;
    }

    public String getOp_Type() {
   
        return op_Type;
    }

    public void setOp_Type(String op_Type) {
   
        this.op_Type = op_Type;
    }

    /**类型转换
     * @param typeName
     * @return
     */
    public static String covertType(String typeName)
    {
   
        String type="";
        if(typeName.contains("String"))
        {
   
            type="String";
        }
        else if(typeName.contains("Integer"))
        {
   
            type="Integer";
        }
        else if(typeName.contains("Boolean"))
        {
   
            type="Boolean";
        }
        else if(typeName.contains("Long"))
        {
   
            type="Long";
        }
        else if(typeName.contains("Double"))
        {
   
            type="Double";
        }
        else if(typeName.contains("BigDecimal"))
        {
   
            type="BigDecimal";
        }
        else
        {
   
            type="";
//                            continue;
        }
        return type;
    }

    /**根据类型,生成对于的数据库插入value是否带有引号
     * @param value
     * @param type
     * @return
     */
    public String getTyepAferValue(String value,String type)
    {
   
        String afterValue = "";
        if(type.contains("String"))
        {
   
            afterValue="\""+value+"\"";
        }
        else if(type.contains("Integer"))
        {
   
            afterValue= value;
        }
        else if(type.contains("Boolean"))
        {
   
            afterValue= value;
        }
        else if(type.contains("Long"))
        {
   
            afterValue= value;
        }
        else if(type.contains("Double"))
        {
   
            afterValue= value;
        }
        else if(type.contains("BigDecimal"))
        {
   
            afterValue= value;
        }
        else
        {
   
            afterValue="";
        }
        return afterValue;
    }

    public String getSql() {
   
        return sql;
    }

    /**
     * 生成sql语句
     */
    public void createSql() {
   
        //获取条件,根据主键
        String where ="";
        if(getPrimary_Keys().size() < 1)
        {
   //没有发现主键,那么直接报错
            throw new RuntimeException("no find primary key");
        }
        for (int i = 0;</
  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
大数据基于用户画像电影推荐系统是一个涉及Python、SparkHadoop等技术的复杂项目。在这个毕业源码案例设计中,源代码包含了多个部分的实现。 首先,Python作为主要的编程语言之一,负责数据的处理和分析。通过Python的数据处理库,我们可以对用户的个人画像数据进行清洗和整合,包括用户的年龄、性别、观影习惯等信息。同时,Python也可以用来编写推荐算法和模型评估的代码。 其次,Spark作为大数据处理和分析的引擎,在这个项目中起着重要的作用。我们可以利用Spark来处理海量的用户观影行为数据,进行分布式计算和数据处理,快速生成用户画像和推荐模型。Spark的机器学习库也可以用来构建推荐系统模型,根据用户的画像特征为其推荐电影。 最后,Hadoop作为大数据存储和管理的平台,负责存储用户的个人画像数据、电影信息数据以及用户观影行为数据。通过Hadoop分布式文件系统(HDFS)和MapReduce计算框架,可以实现数据的高效存储和处理。 在这个毕业源码案例设计中,源代码会包括数据预处理的代码、推荐算法的实现、模型评估的代码,以及与HadoopSpark的交互代码等。这些源代码的编写将涉及到Python的数据处理和建模技术,Spark的分布式计算和机器学习技术,以及Hadoop的数据存储和管理技术。通过这些源代码的设计实现,可以构建一个完整的大数据用户画像电影推荐系统

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值