On dispose d'un fichier CSV, selon le modèle suivant :
input.csv:userId,productId,rating,timestamp
On souhaite construire 3 CSV de la façon suivante :
agg_ratings.csv:userIdAsInteger,productIdAsInteger,ratingSumlookup_user.csv:userId,userIdAsIntegerlookup_product.csv:productId,productIdAsInteger
Où :
userId: identifiant unique d'un utilisateur (String)productId: identifiant unique d'un produit (String)rating: score (Float)timestamp: timestamp unix (Long)userIdAsInteger: identifiant unique d'un utilisateur (Int)productIdAsInteger: identifiant unique d'un produit (Int)ratingSum: Somme des ratings pour le couple utilisateur/produit (Float)
Écrire un programme Spark respectant les contraintes suivantes :
- Dans
agg_ratings, les couples utilisateur/produit sont uniques. - Les
userIdAsInteger(tout comme lesproductIdAsInteger) sont des entiers consécutifs, le premier indice étant 0. - Une pénalité multiplicative de
0.95est appliquée au rating pour chaque jour d'écart avec le timestamp maximal deinput.csv. - On ne souhaite conserver que les
ratings > 0.01.