Cours Big Data K19 - Cas de recommandation de film de Spark et problème de démarrage à froid du système de recommandation

Courriel de l'auteur de l'article : [email protected] Adresse : Huizhou, Guangdong

 ▲ Le programme de ce chapitre

⚪ Maîtriser les cas Spark - recommandations de films ;

⚪ Stockage des modèles de Master Spark ;

⚪ Chargement du modèle Master Spark ;

⚪ Maîtriser le problème de démarrage à froid du système de recommandation de Spark ;

1. Cas – Recommandation de film

1. Recommandations basées sur les utilisateurs

1. Description

Nous allons maintenant traiter l'ensemble de données ml-100k. Le fichier u.data contient 100 000 éléments de données, principalement des évaluations de films par les utilisateurs.

2. Coder

importer org.apache.spark._

importer org.apache.spark.mllib.recommendation.{ALS,Rating}

objet Démo11{

def main(args:Array[String]):Unit={

val conf=new SparkConf().setMaster("local").setAppName("ml-100k")

val sc=nouveau SparkContext(conf)

val rawData=sc.textFile("d://ml-100k/u.data")

val rawRatings=rawData.map(_.split("\t").take(3))

val notes=rawRatings.map{

case Array (utilisateur, film, note) =>

Note (utilisateur.toInt, film.toInt, note.toDouble)

}

modèle val=ALS.train(notes,50,10,0.01)

val rs1=model.predict(789,123)//Prédire la note de l'utilisateur n° 789 pour le film n° 123

val rs2=model.recommendProducts(789,10)//Recommander 10 films (top10) pour l'utilisateur numéroté 789

}

}

2. Vérifiez le contenu recommandé

1. Description

Pour tester visuellement l'efficacité des recommandations, vous pouvez simplement comparer les titres des films notés par les utilisateurs avec les titres des films recommandés.

code

val movies=sc.textFile("d://ml-100k/u.item")

val titles=movies.map(line=>line.split("\\|").take(2))

.map(array=>(array(0).toInt,array(1))).collectAsMap()

println(titles(123))//Afficher le titre du film numéro 123

2. Description

Pour l'utilisateur 789, nous pouvons retrouver les films auxquels il a été exposé, les 10 films les mieux notés et leurs noms. Pour une implémentation spécifique, vous pouvez d'abord utiliser la fonction keyBy de Spark pour créer une paire clé-valeur RDD à partir des évaluations RDD. Sa clé primaire est l'ID utilisateur. Utilisez ensuite la fonction de recherche pour renvoyer uniquement les données de notation correspondant à la valeur clé donnée (c'est-à-dire un identifiant utilisateur spécifique) au conducteur.

code

val movieForUser789=ratings.keyBy(_.user).lookup(789)

println (movieForUser789.size) // Vérifiez combien de films l'utilisateur 789 a évalués

3. Description

Ensuite, nous devons obtenir les 10 meilleurs films avec les notes les plus élevées de cet utilisateur. La méthode spécifique consiste à utiliser l'attribut rating de l'objet Rating pour trier la collection moviesForUser et sélectionner les 10 meilleures notes (y compris l'ID du film correspondant). Utilisez-le ensuite comme entrée et utilisez des titres pour le mapper sous la forme de "(nom du film, note spécifique)". Imprimez ensuite le nom et la note spécifique :

Codage 1

movieForUser789.sortBy(-_.rating).take(10)

.map(rating=>(titres(rating.product),rating.rating))

.foreach(println)

Résultat 1

(Le Parrain, Le (1972), 5.0)

(Trainspotting (1996),5.0)

(Homme mort qui marche (1995), 5.0)

(Guerres des étoiles (1977), 5.0)

(Échangistes (1996), 5.0)

(Quitter Las Vegas (1995), 5.0)

(Lié (1996), 5.0)

(Fargo (1996),5.0)

(Dernière Cène, La (1995), 5.0)

(Parties privées (1997), 4.0)

Codage 2

Je suppose que tu aimes

Origine blog.csdn.net/u013955758/article/details/132567577
conseillé
Classement