【精选】基于大数据技术的短视频推荐系统设计与实现(Spark+Hadoop+Hive)智能推荐、用户行为分析与数据挖掘 用户偏好分析、推荐算法优化与个性化视频推荐 精准推荐、实时数据分析与用户兴趣

 博主介绍:
    ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W+粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台的优质作者。通过长期分享和实战指导,我致力于帮助更多学生完成毕业项目和技术提升。

技术范围:
    我熟悉的技术领域涵盖SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等方面的设计与开发。如果你有任何技术难题,我都乐意与你分享解决方案。

 主要内容:
     我的服务内容包括:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文撰写与辅导、论文降重、长期答辩答疑辅导。我还提供腾讯会议一对一的专业讲解和模拟答辩演练,帮助你全面掌握答辩技巧与代码逻辑。

🍅获取源码请在文末联系我🍅

目录:

一、详细操作演示视频       在文章的尾声,您会发现一张电子名片👤,欢迎通过名片上的联系方式与我取得联系,以获取更多关于项目演示的详尽视频内容。视频将帮助您全面理解项目的关键点和操作流程。期待与您的进一步交流!        承诺所有开发的项目,全程售后陪伴!!!

核心代码介绍:

HIVE函数处理:

Sprak函数处理:

爬虫核心代码介绍(可以实时爬虫数据,做了反扒IP等处理)

系统功能模块设计

2.1python开发语言

2.2 Hadoop框架介绍

2.3 Scrapy介绍

2.4MySQL数据库

2.5 B/S模式

2.6 django框架

为什么选择我(我可以给你的定制项目推荐核心功能,一对一推荐)实现定制!!!

     博主提供的项目均为博主自己收集和开发的!所有的源码都经由博主检验过,能过正常启动并且功能都没有问题!同学们拿到后就能使用!且博主自身就是高级开发,可以将所有的代码都清晰讲解出来。​编辑​编辑​编辑​编辑​编辑

源码获取

文章下方名片联系我即可~大家点赞、收藏、关注、评论啦 、查看👇🏻获取联系方式👇🏻精彩专栏推荐订阅:在下方专栏

一、详细操作演示视频
       在文章的尾声,您会发现一张电子名片👤,欢迎通过名片上的联系方式与我取得联系,以获取更多关于项目演示的详尽视频内容。视频将帮助您全面理解项目的关键点和操作流程。期待与您的进一步交流!
        承诺所有开发的项目,全程售后陪伴!!!

核心代码介绍:

HIVE函数处理:

# coding: utf-8
__author__ = 'ila'
import configparser
from hdfs.client import Client
def upload_to_hdfs(filename):
    try:
        port = 50070
        cp = configparser.ConfigParser()
        cp.read('config.ini')

        client = Client(f"http://{cp.get('sql','host')}:{port}/")
        user_dir = "tmp"
        client.upload(hdfs_path=f'/{user_dir}/{filename}', local_path=filename, chunk_size=2 << 19, overwrite=True)
    except Exception as e:
        print(f'upload_to_hdfs eror : {e}')

def upload_file_to_hdfs(hdfs_url,dir,filename):
    try:

        client = Client(hdfs_url)

        client.upload(hdfs_path=f'/{dir}/{filename}', local_path=filename, chunk_size=2 << 19, overwrite=True)
    except Exception as e:
        print(f'upload_to_hdfs eror : {e}')

if __name__=='__main__':
    port = 50070
    tmp_dir = "tmp"
    hdfs_url=f"http://localhost:{port}/"
    filepath="./naikexiezi/part-00000"
    upload_file_to_hdfs(hdfs_url,tmp_dir,filepath)

Sprak函数处理:

# coding: utf-8
__author__ = 'ila'

import json

from flask import current_app as app
from pyspark.ml.classification import LogisticRegression
from pyspark.ml.clustering import KMeans
from pyspark.ml.feature import VectorAssembler
from pyspark.ml.regression import LinearRegression
from pyspark.sql import SparkSession


def spark_read_mysql(sql, json_filename):
    '''
    排序
    :param sql:
    :param json_filename:
    :return:
    '''
    df = app.spark.read.format("jdbc").options(url=app.jdbc_url,
                                               dbtable=sql).load()
    count = df.count()
    df_data = df.toPandas().to_dict()
    json_data = []
    for i in range(count):
        temp = {}
        for k, v in df_data.items():
            temp[k] = v.get(i)
        json_data.append(temp)
    with open(json_filename, 'w', encoding='utf-8') as f:
        f.write(json.dumps(json_data, indent=4, ensure_ascii=False))


def linear(table_name):
    '''
    回归
    :param table_name:
    :return:
    '''

    spark = SparkSession.builder.appName("flask").getOrCreate()

    training = spark.read.format("libsvm").table(table_name)

    lr = LinearRegression(maxIter=20, regParam=0.01, elasticNetParam=0.6)
    lrModel = lr.fit(training)

    trainingSummary = lrModel.summary
    print("numIterations: %d" % trainingSummary.totalIterations)
    print("objectiveHistory: %s" % str(trainingSummary.objectiveHistory))
    trainingSummary.residuals.show()
    print("RMSE: %f" % trainingSummary.rootMeanSquaredError)
    print("r2: %f" % trainingSummary.r2)

    result = trainingSummary.residuals.toJSON()
    spark.stop()
    return result


def cluster(table_name):
    '''
    聚类
    :param table_name:
    :return:
    '''

    spark = SparkSession.builder.appName("flask").getOrCreate()
    dataset = spark.read.format("libsvm").table(table_name)

    kmeans = KMeans().setK(2).setSeed(1)
    model = kmeans.fit(dataset)

    centers = model.clusterCenters()
    for center in centers:
        print(center)

    return centers


def selector(table_name, Cols):
    '''
    分类
    :return:
    '''
    spark = SparkSession.builder.appName("flask").getOrCreate()

    data = spark.read.table(table_name)

    assembler = VectorAssembler(inputCols=Cols, outputCol="features")
    data = assembler.transform(data).select("features", "label")

    train_data, test_data = data.randomSplit([0.7, 0.3], seed=0)

    lr = LogisticRegression(featuresCol="features", labelCol="label")

    model = lr.fit(train_data)

    predictions = model.transform(test_data)

    return predictions.toJSON()

爬虫核心代码介绍(可以实时爬虫数据,做了反扒IP等处理)

# 数据爬取文件

import scrapy
import pymysql
import pymssql
from ..items import RemenshipinItem
import time
from datetime import datetime,timedelta
import re
import random
import platform
import json
import os
import urllib
from urllib.parse import urlparse
import requests
import emoji

# 热门视频
class RemenshipinSpider(scrapy.Spider):
    name = 'remenshipinSpider'
    spiderUrl = 'https://api.bilibili.com/x/web-interface/popular?ps=20&pn={}'
    start_urls = spiderUrl.split(";")
    protocol = ''
    hostname = ''

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

    def start_requests(self):

        plat = platform.system().lower()
        if plat == 'linux' or plat == 'windows':
            connect = self.db_connect()
            cursor = connect.cursor()
            if self.table_exists(cursor, 'bz8yt_remenshipin') == 1:
                cursor.close()
                connect.close()
                self.temp_data()
                return

        pageNum = 1 + 1
        for url in self.start_urls:
            if '{}' in url:
                for page in range(1, pageNum):
                    next_link = url.format(page)
                    yield scrapy.Request(
                        url=next_link,
                        callback=self.parse
                    )
            else:
                yield scrapy.Request(
                    url=url,
                    callback=self.parse
                )

    # 列表解析
    def parse(self, response):
        
        _url = urlparse(self.spiderUrl)
        self.protocol = _url.scheme
        self.hostname = _url.netloc
        plat = platform.system().lower()
        if plat == 'windows_bak':
            pass
        elif plat == 'linux' or plat == 'windows':
            connect = self.db_connect()
            cursor = connect.cursor()
            if self.table_exists(cursor, 'bz8yt_remenshipin') == 1:
                cursor.close()
                connect.close()
                self.temp_data()
                return

        data = json.loads(response.body)
        list = data["data"]["list"]
        
        for item in list:

            fields = RemenshipinItem()




            fields["biaoti"] = item["title"]
            fields["fengmian"] = item["pic"]
            fields["spdz"] = item["short_link_v2"]
            fields["up"] = item["owner"]["name"]
            fields["fabudi"] = item["pub_location"]
            fields["miaoshu"] = item["desc"]
            fields["spsc"] = item["duration"]
            fields["leixing"] = item["tname"]
            fields["bofangliang"] = item["stat"]["view"]
            fields["dianzanliang"] = item["stat"]["like"]
            fields["toubiliang"] = item["stat"]["coin"]
            fields["shoucangliang"] = item["stat"]["favorite"]
            fields["fenxiangliang"] = item["stat"]["share"]

            yield fields

    # 详情解析
    def detail_parse(self, response):
        fields = response.meta['fields']



        return fields

    # 去除多余html标签
    def remove_html(self, html):
        if html == None:
            return ''
        pattern = re.compile(r'<[^>]+>', re.S)
        return pattern.sub('', html).strip()

    # 数据库连接
    def db_connect(self):
        type = self.settings.get('TYPE', 'mysql')
        host = self.settings.get('HOST', 'localhost')
        port = int(self.settings.get('PORT', 3306))
        user = self.settings.get('USER', 'root')
        password = self.settings.get('PASSWORD', '123456')

        try:
            database = self.databaseName
        except:
            database = self.settings.get('DATABASE', '')

        if type == 'mysql':
            connect = pymysql.connect(host=host, port=port, db=database, user=user, passwd=password, charset='utf8')
        else:
            connect = pymssql.connect(host=host, user=user, password=password, database=database)

        return connect

    # 断表是否存在
    def table_exists(self, cursor, table_name):
        cursor.execute("show tables;")
        tables = [cursor.fetchall()]
        table_list = re.findall('(\'.*?\')',str(tables))
        table_list = [re.sub("'",'',each) for each in table_list]

        if table_name in table_list:
            return 1
        else:
            return 0

    # 数据缓存源
    def temp_data(self):

        connect = self.db_connect()
        cursor = connect.cursor()
        sql = '''
            insert into `remenshipin`(
                id
                ,biaoti
                ,fengmian
                ,spdz
                ,up
                ,fabudi
                ,miaoshu
                ,spsc
                ,leixing
                ,bofangliang
                ,dianzanliang
                ,toubiliang
                ,shoucangliang
                ,fenxiangliang
            )
            select
                id
                ,biaoti
                ,fengmian
                ,spdz
                ,up
                ,fabudi
                ,miaoshu
                ,spsc
                ,leixing
                ,bofangliang
                ,dianzanliang
                ,toubiliang
                ,shoucangliang
                ,fenxiangliang
            from `bz8yt_remenshipin`
            where(not exists (select
                id
                ,biaoti
                ,fengmian
                ,spdz
                ,up
                ,fabudi
                ,miaoshu
                ,spsc
                ,leixing
                ,bofangliang
                ,dianzanliang
                ,toubiliang
                ,shoucangliang
                ,fenxiangliang

系统功能模块设计

短视频推荐系统在设计与实现时,采取了模块性的设计理念,把相似的系统的功能整合到一个模组中,以增强内部的功能,减少各组件之间的联系,从而达到减少相互影响的目的。

系统主要包括热门视频、用户、用户反馈、论坛交流、系统管理、用户信息等功能。系统总体功能结构图如图4-1所示。

2.1python开发语言

Python是一种高级编程语言,由荷兰人Guido van Rossum于1989年创立,并于1991年首次发布。Python的设计哲学强调代码的可读性和简洁性,因此它被广泛应用于各种领域,包括Web开发、数据分析、人工智能和科学计算等。Python语言的最大特点是其语法简洁明了,易于学习和使用。Python支持多种编程范式,包括面向对象编程、函数式编程和过程式编程。Python还拥有丰富的标准库和第三方库,可以帮助开发者快速实现各种功能。在Web开发方面,Python有许多优秀的框架,如Django和Flask,它们可以帮助开发者快速构建高效的Web应用。这些框架提供了许多内置的功能,如数据库访问、表单处理和用户认证等,大大简化了Web开发的过程。在数据分析方面,Python是最受欢迎的编程语言之一。Python的pandas库提供了强大的数据处理和分析功能,可以帮助开发者轻松处理大量的数据。同时,Python的matplotlib和seaborn库可以用于数据可视化,帮助开发者更好地理解数据。在人工智能和机器学习方面,Python也有着广泛的应用。Python的TensorFlow和PyTorch库是最常用的深度学习框架,它们提供了丰富的工具和接口,可以帮助开发者构建和训练复杂的神经网络模型。

在科学计算方面,Python的NumPy和SciPy库提供了强大的数值计算功能,可以帮助开发者解决各种复杂的数学问题。Python的SymPy库还可以用于符号计算,为科学计算提供了更多的可能。

Python是一种强大而灵活的编程语言,无论你是初学者还是专业开发者,都可以从Python中获益。Python的简洁语法、丰富库和广泛的应用领域使其成为当今最受欢迎的编程语言之一。

2.2 Hadoop框架介绍

Hadoop是一个开源的分布式计算框架,旨在处理大规模数据集的存储和处理。它基于Google的MapReduce论文和Google文件系统(GFS)的概念,并由Apache软件基金会进行开发和维护。

Hadoop的核心组件包括Hadoop分布式文件系统(HDFS)和Hadoop YARN(Yet Another Resource Negotiator)。HDFS是一个可靠、高容错性的文件系统,设计用于在廉价硬件上存储大量数据,并提供高吞吐量的数据访问。YARN是一个资源管理器,负责调度和管理集群中的计算资源,使得多个应用程序可以共享集群资源并以并行方式运行。Hadoop的另一个重要组件是MapReduce,它是一种编程模型和执行引擎,用于将大规模数据集分解为小的数据块,并在分布式环境中进行并行处理。MapReduce模型将计算任务分为两个阶段:Map阶段和Reduce阶段。在Map阶段,数据被划分为若干个键值对,并通过用户定义的函数进行转换。在Reduce阶段,相同键的数据被合并和聚合,生成最终的结果。

Hadoop生态系统还包括许多其他工具和库,如Hive、Pig、HBase等,用于更方便地处理和分析数据。Hive是一个基于SQL的数据仓库工具,可以将结构化数据映射到Hadoop上,并提供类似于SQL的查询语言。Pig是一个高级脚本语言和运行环境,用于在Hadoop上进行数据转换和分析。HBase是一个分布式、可扩展的NoSQL数据库,适用于大规模的随机读写操作。

2.3 Scrapy介绍

Scrapy是一个基于Python的开源网络爬虫框架,用于快速、高效地抓取和提取互联网上的数据。它提供了一套强大的工具和API,使得开发者可以轻松地构建和管理自己的爬虫项目。Scrapy具有高度可定制性的特点。它采用了分布式架构,支持并发请求和异步处理,能够高效地处理大规模的数据抓取任务。同时,Scrapy还提供了丰富的中间件和插件机制,允许开发者根据自己的需求对请求、响应和数据进行处理和扩展。Scrapy还内置了强大的数据提取功能。通过使用XPath或CSS选择器,开发者可以方便地从HTML、XML等结构化数据中提取所需的信息,并进行清洗和转换。此外,Scrapy还支持使用正则表达式和自定义的解析器来处理非结构化数据。

Scrapy还提供了丰富的调度器和去重器,能够有效地控制爬虫的请求流程和避免重复抓取。它还支持多种存储方式,包括文件、数据库和API接口,方便开发者将抓取到的数据保存和导出。

2.4MySQL数据库

MySQL是一种开源的关系型数据库管理系统(RDBMS),被广泛应用于各种规模的企业和个人项目中。它是由瑞典MySQL AB公司开发并推出的,后来被Sun Microsystems收购,最终成为Oracle公司的一部分。MySQL以其高性能、可靠性和灵活性而闻名,成为最受欢迎的数据库之一。

MySQL具有许多优点,其中之一是其简单易用的特性。它采用了SQL(Structured Query Language)作为查询语言,使得用户可以通过简单的命令和语法来操作数据库。MySQL提供了丰富的文档和社区支持,使得初学者可以快速上手并解决问题。MySQL还具备出色的性能和扩展性。它可以处理大量的数据,并支持高并发访问。MySQL使用了多线程架构和高效的索引机制,以提供快速的数据读写和查询响应时间。MySQL还支持主从复制和分布式架构,可以轻松地实现数据的备份和负载均衡,满足不同规模和需求的项目。MySQL的可靠性和稳定性很高。它具备ACID(原子性、一致性、隔离性和持久性)特性,确保数据的完整性和一致性。MySQL还提供了多种备份和恢复机制,可以防止数据丢失和故障发生。MySQL支持多种编程语言的接口,如Python、Java、 PYTHON等,使得开发人员可以方便地与数据库进行交互。它还提供了丰富的存储引擎选项,如InnoDB、MyISAM等,以满足不同应用场景下的需求。

2.5 B/S模式

B/S模式,即浏览器/服务器模式,是一种常见的网络应用架构模式。在B/S模式中,用户通过浏览器作为客户端与服务器进行交互。相比于传统的C/S模式,B/S模式具有许多优势。B/S模式不需要安装客户端软件,只需通过浏览器访问网页即可使用,大大降低了部署和维护成本。B/S模式实现了跨平台和跨设备的应用访问,用户可以在任何具有浏览器的设备上使用应用程序。B/S模式将应用逻辑集中在服务器端,提高了系统的安全性和稳定性,并方便进行版本升级和功能扩展。B/S模式还支持多用户同时访问,实现了信息共享和协同办公。

2.6 django框架

Django是一个基于Python的高级Web框架,由美国开发者Adrian Holovaty和DavidDjango是一个基于Python的高级Web框架,由美国开发者Adrian Holovaty和David Beazley于2005年开发。Django的目标是简化Web开发的复杂性,提供快速、安全和可扩展的解决方案。它的核心理念是“让开发变得简单”,通过提供一系列内置的功能和工具,帮助开发者快速构建高质量的Web应用程序。Django具有许多独特的特性,使其成为了许多开发人员的首选框架。首先,Django遵循MVC(模型-视图-控制器)设计模式,将应用程序分为三个独立的组件,使得代码更加模块化和易于维护。Django提供了一套完整的ORM(对象关系映射)系统,允许开发者轻松地操作数据库,而无需编写复杂的SQL语句。此外,Django还提供了许多内置的模板引擎和表单处理功能,使得开发者可以快速地构建用户界面。Django还具有强大的安全性和可扩展性。它采用了多种安全措施,如输入验证、跨站请求伪造保护等,以确保应用程序的安全性。同时,Django支持多种数据库后端,可以根据项目需求灵活地选择。Django还提供了丰富的插件生态系统,可以方便地扩展应用程序的功能。

Django是一个功能强大、易于使用的Web框架,适用于各种规模的项目。它的简洁语法、丰富的功能和良好的社区支持使得它成为了许多开发人员的首选框架。

为什么选择我(我可以给你的定制项目推荐核心功能,一对一推荐)实现定制!!!
     博主提供的项目均为博主自己收集和开发的!所有的源码都经由博主检验过,能过正常启动并且功能都没有问题!同学们拿到后就能使用!且博主自身就是高级开发,可以将所有的代码都清晰讲解出来。
  • 源码获取

    文章下方名片联系我即可~
    大家点赞、收藏、关注、评论啦 、查看👇🏻获取联系方式👇🏻
    精彩专栏推荐订阅:在下方专栏
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员阿龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值