django 利用用户的评分 pyspark进行简单的智能推荐

新人学习django 是按照这个大佬的教程学习的
链接: https://www.cnblogs.com/derek1184405959/p/8733194.html.

很多步骤都是按照上面的教程学习的,这里只是记录一下自己学习的过程和一些错误
如果有人想要系统的学习,建议去上面那位大佬处学习

这里需要在windows中配置spark和hadoop
下载对应版本的spark和hadoop 然后配置环境变量
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在utils下新建一个sparkMllib.py

import pymysql
import numpy as np
from pyspark.sql import SparkSession,SQLContext
from pyspark import SparkContext
from pyspark import SparkConf
from pyspark.mllib.recommendation import ALS
from random import randint
from datetime import  datetime
class Als:
    model=""
    datetime=""
    # 做数据处理,清洗之类的,但是因为是测试,就只返回了一个rdd
    def datafilter(self, data):
        return data.select("user_id", "goods_id", "rating").rdd
    def getmodel(self):
        if(self.datetime < datetime.now().strftime("%Y.%m.%d")):
            self.model=self.train()
            self.datetime=datetime.now().strftime("%Y.%m.%d")
            return self.model
        else:
            return self.model

    def train(self):
        spark = SparkSession. \
            Builder() \
            .appName("hot_book") \
            .master("local") \
            .getOrCreate()
        prop={
                "user":"root",
                "password":"root",
                "driver":"com.mysql.jdbc.Driver"
            }

        url="jdbc:mysql://localhost:3306/mxshop"
        data=spark.read.jdbc(url=url,table="user_operation_usersource",properties=prop)
        ratingsRdd=self.datafilter(data=data)
        #训练
        models=ALS.train(ratingsRdd,10,10,0.01)
        return models

在user_operation的views上添加一个als的对象
创建对象在一段时间之类可以根据训练的model进行推荐,而不需要每一次都重新进行训练,虽说是实时推荐系统,但是只是离线推荐,将时间间隔变小而已。
在这里插入图片描述
然后添加智能过滤的viewset

class AutoGoodsViewSet(viewsets.ModelViewSet):
    """
    智能推荐
    """
    serializer_class = GoodsSerializer
    #判断是否登录,选择过滤方式
    if(IsAuthenticated):
        filter_class = GoodsFilter
    #只获取对用户推荐的书的数据
    def get_queryset(self):
        try:
            if(IsAuthenticated):
                model=als.getmodel()
                user_id=self.request.user.id
                result=model.recommendProducts(user_id,1)
                return Goods.objects.filter(id=result[0][1])
        except:
            return Goods.objects.all().order_by("id").filter(is_hot=1)
        else:
            return Goods.objects.all().order_by("id").filter(is_hot=1)

根据是否登录,判断推荐的书籍
没有登录,返回最热门的书籍,登录了返回推荐的书籍
配置url

# 配置用户推荐的url
router.register(r'autogoods', AutoGoodsViewSet, basename="autogoods")

没有登录时
在这里插入图片描述

登录之后
在这里插入图片描述

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值