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

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

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

这里需要在windows中配置spark和hadoop
下载对应版本的spark和hadoop 然后配置环境变量
django 利用用户的评分 pyspark进行简单的智能推荐_第1张图片
django 利用用户的评分 pyspark进行简单的智能推荐_第2张图片
在这里插入图片描述
在这里插入图片描述
在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进行推荐,而不需要每一次都重新进行训练,虽说是实时推荐系统,但是只是离线推荐,将时间间隔变小而已。
django 利用用户的评分 pyspark进行简单的智能推荐_第3张图片
然后添加智能过滤的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")

没有登录时
django 利用用户的评分 pyspark进行简单的智能推荐_第4张图片

登录之后
django 利用用户的评分 pyspark进行简单的智能推荐_第5张图片

你可能感兴趣的:(django 利用用户的评分 pyspark进行简单的智能推荐)