新人学习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")
没有登录时
登录之后