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